最严格的身份证校验(JavaScript版)

      在JavaWeb研发过程中为了获取有效的用户信息,校验其数据的有效性非常是必要,以下贴出在项目中用到的关于身份证的校验:

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

      <html>
            <head>
                  <meta http-equiv="Content-Type" content="text/html; charset=gb2312"/>
                  <title>身份证校验</title>
                  <script type="text/javascript" src="./jquery-1.6.2.js"></script>
                  <script type="text/javascript">
                        function checkCertificateNo(){
                              var certificateNo = $("#certificateNo").val();//身份证号码
                              if(certificateNo.length != 18){
                                    alert("身份证号码无效,请使用第二代身份证!!!"); 
                              }else{
                                    var address = certificateNo.substring(0,6);//6位,地区代码
                                    var birthday = certificateNo.substring(6,14);//8位,出生日期
                                    var sequenceCode =  certificateNo.substring(14,17);//3位,顺序码:奇为男,偶为女
                                    var checkCode =  certificateNo.substring(17);//1位,校验码:检验位
                                    console.log("身份证号码:"+certificateNo+"、地区代码:"+address+"、出生日期:"+birthday+"、顺序码:"+sequenceCode+"、校验码:"+checkCode);

                                    var province={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:"国外"};

                                    var year =  birthday.substring(0,4);   
                                    var month = birthday.substring(4,6);   
                                    var day = birthday.substring(6);
                                    var tempDate = new Date(year,parseFloat(month)-1,parseFloat(day)); 
                                    if(province[parseInt(address.substr(0,2))] == null || (tempDate.getFullYear()!=parseFloat(year) || tempDate.getMonth()!=parseFloat(month)-1 || tempDate.getDate()!=parseFloat(day))){//这里用getFullYear()获取年份,避免千年虫问题
                                          alert("身份证号码无效,请又一次输入!!!");
                                    }else{
                                          var weightedFactors = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ];//加权因子   
                                          var valideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ];// 身份证验证位值,当中10代表X
                                          var certificateNoArray =certificateNo.split("");// 得到身份证数组
                                          var sum = 0;// 声明加权求和变量
                                          if (certificateNoArray[17].toLowerCase() == 'x') {
                                                certificateNoArray[17] = 10;// 将最后位为x的验证码替换为10  
                                          }
                                         for ( var i = 0; i < 17; i++) {
                                               sum += weightedFactors[i] * certificateNoArray[i];// 加权求和   
                                        }
                                        valCodePosition = sum % 11;// 得到验证码所在位置
                                       if (certificateNoArray[17] == valideCode[valCodePosition]) {
                                              var sex = "男";
                                             if(sequenceCode%2==0){
                                                    sex = "女";
                                              }
                                             alert("身份证号码有效,性别为:"+sex+"!");
                                        } else {
                                             alert("身份证号码无效,请又一次输入!!!");
                                        }
                                   }
                             }
                        }
                   </script>
            </head>
            <body>
                  <input id = "certificateNo" name = "certificateNo" value = " 61072919761109762X"/> &nbsp;&nbsp;&nbsp;<input type="button" οnclick="checkCertificateNo();" value = "開始校验"/>
            </body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值