
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>通過(guò)身份證識(shí)別生日和性別、年齡</title>
</head>
<%
'位數(shù)判斷
Sno=request("Sno")
If Len(Sno)="15" Then
mm="15"
xxx=Right(Sno,1)
End If
If Len(Sno)="18" Then
mm="18"
yyy=Right(Sno, 2)
xxx=Left(yyy, 1)
End If
'性別判斷
If xxx Mod 2=0 Then
nn="女"'女
Else If xxx Mod 2=1 Then
nn="男"'男
End If End if
Dim a, b, c, d, e
a = Sno
'新身份證號(hào)碼的轉(zhuǎn)換,老身份證號(hào)碼雷同
If mm="18" Then
b = Left(a, 14) '取出生日日期字符串
d = Right(b, 8)
a = Left(d, 4) '取出年 18
b = Left(d, 6) '取出月
b = Right(b, 2)
c = Right(d, 2) '取出日
Else If mm="15" Then
b = Left(a, 12)
d = Right(b, 6)
a = 19&Left(d, 2) '取出年 15
b = Left(d, 4) '取出月
b = Right(b, 2)
c = Right(d, 2) '取出日
End If End If
e =a+"-"+b+"-"+c'生日字符串
%>
性別:<b><%=nn%></b><br>
生日:<b><%=e%></b><br>
年齡:<b><%=Year(now)-a%></b><br>
位:<b><%=mm%></b><br>
<body>
<form action="" method="post">
輸入身份證號(hào)
<input name="Sno" type="text" value="320706198901033023" />
<input type="submit" name="Submit" value="讀取信息=>" />
</form>
</body>
</html>
=========================== 分割線 ===========================
'以上是根據(jù)年份算的年齡,下面是根據(jù)生日計(jì)算年齡,并做成asp函數(shù)
function AgeResult(strCard)
'根據(jù)身份證判斷年齡
If Len(strCard)="15" Then
mm="15"
xxx=Right(strCard,1)
End If
If Len(strCard)="18" Then
mm="18"
yyy=Right(strCard, 2)
xxx=Left(yyy, 1)
End If
'性別判斷
If xxx Mod 2=0 Then
nn="女"'女
Else If xxx Mod 2=1 Then
nn="男"'男
End If End if
Dim str_a, str_b, str_c, str_d, str_e
str_a = strCard
'新身份證號(hào)碼的轉(zhuǎn)換,老身份證號(hào)碼雷同
If mm="18" Then
str_b = Left(str_a, 14) '取出生日日期字符串
str_d = Right(str_b, 8)
str_a = Left(str_d, 4) '取出年 18
str_b = Left(str_d, 6) '取出月
str_b = Right(str_b, 2)
str_c = Right(str_d, 2) '取出日
Else If mm="15" Then
str_b = Left(str_a, 12)
str_d = Right(str_b, 6)
str_a = 19&Left(str_d, 2) '取出年 15
str_b = Left(str_d, 4) '取出月
str_b = Right(str_b, 2)
str_c = Right(str_d, 2) '取出日
End If End If
str_e =str_a+"-"+str_b+"-"+str_c'生日字符串
Age=Year(now)-str_a
shengri1=""&str_b&"/"&str_c&""
shengri2=""&month(date())&"/"&day(date())&""
if datediff("d",shengri1,shengri2)>=0 then Age=Age+1
AgeResult=Age
end function
'調(diào)用方式
response.write AgeResult("320706198901033023")
=========================== 分割線 ===========================
居民身份證號(hào)碼最后一位
大陸的身份證為18位,老的身份證是15位。
關(guān)于身份證第18是怎么計(jì)算的,原理如下:根據(jù)〖中華人民共和國(guó)國(guó)家標(biāo)準(zhǔn) GB 11643-1999〗中有關(guān)公民身份號(hào)碼的規(guī)定,公民身份號(hào)碼是特征組合碼,由十七位數(shù)字本體碼和一位數(shù)字校驗(yàn)碼組成。排列順序從左至右依次為:六位數(shù) 字地址碼,八位數(shù)字出生日期碼,三位數(shù)字順序碼和一位數(shù)字校驗(yàn)碼。
地址碼(身份證前六位)表示編碼對(duì)象常住戶口所在縣(市、旗、區(qū))的行政區(qū)劃代碼。(所有區(qū)域的編碼可以到這個(gè)網(wǎng)站http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/
查詢到最新的縣及縣以上的行政編碼資料。
生日期碼(身份證第七位到第十四位)表示編碼對(duì)象出生的年、月、日,其中年份用四位數(shù)字表示,年、月、日之間不用分隔符。例如:1981年05月11日就用19810511表示。
順序碼(身份證第十五位到十七位)為同一地址碼所標(biāo)識(shí)的區(qū)域范圍內(nèi),對(duì)同年、月、日出生的人員編定的順序號(hào)。其中第十七位奇數(shù)分給男性,偶數(shù)分給女性。
校驗(yàn)碼(身份證最后一位)是根據(jù)前面十七位數(shù)字碼,按照ISO 7064:1983.MOD 11-2校驗(yàn)碼計(jì)算出來(lái)的檢驗(yàn)碼。
第十八位數(shù)字的計(jì)算方法為:
1、將前面的身份證號(hào)碼17位數(shù)分別乘以不同的系數(shù)。從第一位到第十七位的系數(shù)分別為:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
2、將這17位數(shù)字和系數(shù)相乘的結(jié)果相加。
3、用加出來(lái)和除以11,看余數(shù)是多少?
4、余數(shù)只可能有0 1 2 3 4 5 6 7 8 9 10這11個(gè)數(shù)字。其分別對(duì)應(yīng)的最后一位身份證的號(hào)碼為1 0 X 9 8 7 6 5 4 3 2。
5、通過(guò)上面得知如果余數(shù)是2,就會(huì)在身份證的第18位數(shù)字上出現(xiàn)羅馬數(shù)字的Ⅹ。如果余數(shù)是10,身份證的最后一位號(hào)碼就是2。
例如:某男性的身份證號(hào)碼是34052419800101001X。我們要看看這個(gè)身份證是不是合法的身份證。
首先:我們得出,前17位的乘積和是189
然后:用189除以11得出的結(jié)果是17 + 2/11,也就是說(shuō)余數(shù)是2。
最后:通過(guò)對(duì)應(yīng)規(guī)則就可以知道余數(shù)2對(duì)應(yīng)的數(shù)字是x。所以,這是一個(gè)合格的身份證號(hào)碼。