Heim  >  Artikel  >  Web-Frontend  >  javascript或asp实现的判断身份证号码是否正确两种验证方法_javascript技巧

javascript或asp实现的判断身份证号码是否正确两种验证方法_javascript技巧

WBOY
WBOYOriginal
2016-05-16 18:41:031338Durchsuche

具体代码如下:

一、用javascript验证:

复制代码 代码如下:

<script> <BR>function checkIdcard(idcard){ <BR>var Errors=new Array( <BR>"验证通过!", <BR>"身份证号码位数不对!", <BR>"身份证号码出生日期超出范围或含有非法字符!", <BR>"身份证号码校验错误!", <BR>"身份证地区非法!" <BR>); <BR>var area={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"} <br><br>var idcard,Y,JYM; <BR>var S,M; <BR>var idcard_array = new Array(); <BR>idcard_array = idcard.split(""); <BR>//地区检验 <BR>if(area[parseInt(idcard.substr(0,2))]==null) return Errors[4]; <BR>//身份号码位数及格式检验 <BR>switch(idcard.length){ <BR>case 15: <BR>if ( (parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) % 100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){ <BR>ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性 <BR>} else { <BR>ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性 <BR>} <BR>if(ereg.test(idcard)) return Errors[0]; <BR>else return Errors[2]; <BR>break; <BR>case 18: <BR>//18位身份号码检测 <BR>//出生日期的合法性检查 <BR>//闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9])) <BR>//平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8])) <BR>if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){ <BR>ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式 <BR>} else { <BR>ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式 <BR>} <BR>if(ereg.test(idcard)){//测试出生日期的合法性 <BR>//计算校验位 <BR>S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7 <BR>+ (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9 <BR>+ (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10 <BR>+ (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5 <BR>+ (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8 <BR>+ (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4 <BR>+ (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2 <BR>+ parseInt(idcard_array[7]) * 1 <BR>+ parseInt(idcard_array[8]) * 6 <BR>+ parseInt(idcard_array[9]) * 3 ; <BR>Y = S % 11; <BR>M = "F"; <BR>JYM = "10X98765432"; <BR>M = JYM.substr(Y,1);//判断校验位 <BR>if(M == idcard_array[17]) return Errors[0]; //检测ID的校验位 <BR>else return Errors[3]; <BR>} <BR>else return Errors[2]; <BR>break; <BR>default: <BR>return Errors[1]; <BR>break; <BR>} <br><br>} <BR>alert(checkIdcard("220183198808081610")) <BR></script>

二、通过asp代码验证:

复制代码 代码如下:

Function checkIDCard(idcard) '-1为正确的身份证,否则为非法身份证

Dim Y, JYM
Dim S, M

Dim area
area = "11,12,13,14,15,21,22,23,31,32,33,34,35,36,37,41,42,43,44,45,46,50,51,52,53,54,61,62,63,64,65,71,81,82,91"
Dim ereg
Set ereg = New regexp

'地区检验
If InStr(1, area, Mid(idcard, 1, 2)) = 0 Then checkIDCard = 1: Exit Function

'身份号码位数及格式检验
Select Case Len(idcard)
Case 15
If ((CInt(Mid(idcard, 7, 2)) + 1900) Mod 4 = 0 or ((CInt(Mid(idcard, 7, 2)) + 1900) Mod 100 = 0 And (CInt(Mid(idcard, 7, 2)) + 1900) Mod 4 = 0)) Then
ereg.Pattern = "^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$" ';//测试出生日期的合法性
Else
ereg.Pattern = "^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$" ';//测试出生日期的合法性
End If
If (ereg.test(idcard)) Then
checkIDCard = -1
Else
checkIDCard = 2
End If
Case 18
'//18位身份号码检测
'//出生日期的合法性检查
If ((CInt(Mid(idcard, 7, 2)) + 1900) Mod 4 = 0 or ((CInt(Mid(idcard, 7, 2)) + 1900) Mod 100 = 0 And (CInt(Mid(idcard, 7, 2)) + 1900) Mod 4 = 0)) Then
ereg.Pattern = "^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$" ';//闰年出生日期的合法性正则表达式
Else
ereg.Pattern = "^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$" ';//平年出生日期的合法性正则表达式
End If
If (ereg.test(idcard)) Then
'//计算校验位
S = (CInt(Mid(idcard, 0 + 1, 1)) + CInt(Mid(idcard, 10 + 1, 1))) * 7 _
+ (CInt(Mid(idcard, 1 + 1, 1)) + CInt(Mid(idcard, 11 + 1, 1))) * 9 _
+ (CInt(Mid(idcard, 2 + 1, 1)) + CInt(Mid(idcard, 12 + 1, 1))) * 10 _
+ (CInt(Mid(idcard, 3 + 1, 1)) + CInt(Mid(idcard, 13 + 1, 1))) * 5 _
+ (CInt(Mid(idcard, 4 + 1, 1)) + CInt(Mid(idcard, 14 + 1, 1))) * 8 _
+ (CInt(Mid(idcard, 5 + 1, 1)) + CInt(Mid(idcard, 15 + 1, 1))) * 4 _
+ (CInt(Mid(idcard, 6 + 1, 1)) + CInt(Mid(idcard, 16 + 1, 1))) * 2 _
+ CInt(Mid(idcard, 7 + 1, 1)) * 1 _
+ CInt(Mid(idcard, 8 + 1, 1)) * 6 _
+ CInt(Mid(idcard, 9 + 1, 1)) * 3
Y = S Mod 11
M = "F"
JYM = "10X98765432"
M = Mid(JYM, Y + 1, 1)

If (M = Mid(idcard, 17 + 1, 1)) Then checkIDCard = -1 Else checkIDCard = 3

Else
checkIDCard = 4
End If

Case Else
checkIDCard = Len(idcard)
End Select

End Function%>
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn