
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>通過身份證識別生日和性別、年齡</title>
</head>
<%
'位數判斷
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
'新身份證號碼的轉換,老身份證號碼雷同
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">
輸入身份證號
<input name="Sno" type="text" value="320706198901033023" />
<input type="submit" name="Submit" value="讀取信息=>" />
</form>
</body>
</html>
=========================== 分割線 ===========================
'以上是根據年份算的年齡,下面是根據生日計算年齡,并做成asp函數
function AgeResult(strCard)
'根據身份證判斷年齡
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
'新身份證號碼的轉換,老身份證號碼雷同
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
'調用方式
response.write AgeResult("320706198901033023")
=========================== 分割線 ===========================
居民身份證號碼最后一位
大陸的身份證為18位,老的身份證是15位。
關于身份證第18是怎么計算的,原理如下:根據〖中華人民共和國國家標準 GB 11643-1999〗中有關公民身份號碼的規定,公民身份號碼是特征組合碼,由十七位數字本體碼和一位數字校驗碼組成。排列順序從左至右依次為:六位數 字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。
地址碼(身份證前六位)表示編碼對象常住戶口所在縣(市、旗、區)的行政區劃代碼。(所有區域的編碼可以到這個網站http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/
查詢到最新的縣及縣以上的行政編碼資料。
生日期碼(身份證第七位到第十四位)表示編碼對象出生的年、月、日,其中年份用四位數字表示,年、月、日之間不用分隔符。例如:1981年05月11日就用19810511表示。
順序碼(身份證第十五位到十七位)為同一地址碼所標識的區域范圍內,對同年、月、日出生的人員編定的順序號。其中第十七位奇數分給男性,偶數分給女性。
校驗碼(身份證最后一位)是根據前面十七位數字碼,按照ISO 7064:1983.MOD 11-2校驗碼計算出來的檢驗碼。
第十八位數字的計算方法為:
1、將前面的身份證號碼17位數分別乘以不同的系數。從第一位到第十七位的系數分別為:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
2、將這17位數字和系數相乘的結果相加。
3、用加出來和除以11,看余數是多少?
4、余數只可能有0 1 2 3 4 5 6 7 8 9 10這11個數字。其分別對應的最后一位身份證的號碼為1 0 X 9 8 7 6 5 4 3 2。
5、通過上面得知如果余數是2,就會在身份證的第18位數字上出現羅馬數字的Ⅹ。如果余數是10,身份證的最后一位號碼就是2。
例如:某男性的身份證號碼是34052419800101001X。我們要看看這個身份證是不是合法的身份證。
首先:我們得出,前17位的乘積和是189
然后:用189除以11得出的結果是17 + 2/11,也就是說余數是2。
最后:通過對應規則就可以知道余數2對應的數字是x。所以,這是一個合格的身份證號碼。