JavaScript(JS)验证身份证

使用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
>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值