使用JavaScript验证身份证的代码如下:
将代码放到JS直接调用即可应用到网页中。
1 < script >
2 function checkIdcard(idcard1){
3 var idcard = document.forms[ 0 ].elements[idcard1].value;
4 var Errors = new Array(
5 " 验证通过! " ,
6 " 身份证号码位数不对! " ,
7 " 身份证号码出生日期超出范围或含有非法字符! " ,
8 " 身份证号码校验错误! " ,
9 " 身份证地区非法! "
10 );
11 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 : " 国外 " }
12
13 var idcard,Y,JYM;
14 var S,M;
15 var idcard_array = new Array();
16 idcard_array = idcard.split( "" );
17 /* 地区检验 */
18 if (area[parseInt(idcard.substr( 0 , 2 ))] == null )
19 {
20 alert(Errors[ 4 ]);
21 return false ;
22 }
23 /* 身份号码位数及格式检验 */
24 switch (idcard.length){
25 case 15 :
26 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 )){
27 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 }$ / ; // 测试出生日期的合法性
28 } else {
29 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 }$ / ; // 测试出生日期的合法性
30 }
31 if (ereg.test(idcard)){
32 alert(Errors[ 0 ] + " 15 " );
33 return false ;
34 }
35 else {
36 alert(Errors[ 2 ]);
37 return false ;
38 }
39 break ;
40
41 case 18 :
42 // 18位身份号码检测
43 // 出生日期的合法性检查
44 // 闰年月日:((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]))
45 // 平年月日:((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]))
46 if ( parseInt(idcard.substr( 6 , 4 )) % 4 == 0 || (parseInt(idcard.substr( 6 , 4 )) % 100 == 0 && parseInt(idcard.substr( 6 , 4 )) % 4 == 0 )){
47 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] $ / ; // 闰年出生日期的合法性正则表达式
48 } else {
49 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]$ / ; // 平年出生日期的合法性正则表达式
50 }
51 if (ereg.test(idcard)){ // 测试出生日期的合法性
52 // 计算校验位
53 S = (parseInt(idcard_array[ 0 ]) + parseInt(idcard_array[ 10 ])) * 7
54 + (parseInt(idcard_array[ 1 ]) + parseInt(idcard_array[ 11 ])) * 9
55 + (parseInt(idcard_array[ 2 ]) + parseInt(idcard_array[ 12 ])) * 10
56 + (parseInt(idcard_array[ 3 ]) + parseInt(idcard_array[ 13 ])) * 5
57 + (parseInt(idcard_array[ 4 ]) + parseInt(idcard_array[ 14 ])) * 8
58 + (parseInt(idcard_array[ 5 ]) + parseInt(idcard_array[ 15 ])) * 4
59 + (parseInt(idcard_array[ 6 ]) + parseInt(idcard_array[ 16 ])) * 2
60 + parseInt(idcard_array[ 7 ]) * 1
61 + parseInt(idcard_array[ 8 ]) * 6
62 + parseInt(idcard_array[ 9 ]) * 3 ;
63 Y = S % 11 ;
64 M = " F " ;
65 JYM = " 10X98765432 " ;
66 M = JYM.substr(Y, 1 ); /* 判断校验位 */
67 if (M == idcard_array[ 17 ]){
68 alert(Errors[ 0 ] + " 18 " );
69 return false ; /* 检测ID的校验位 */
70 }
71 else {
72 alert(Errors[ 3 ]);
73 return false ;
74 }
75 }
76 else {
77 alert(Errors[ 2 ]);
78 return false ;
79 }
80 break ;
81
82 default :
83 alert(Errors[ 1 ]);
84 return false ;
85
86 }
87 </ script >