前端身份证效验

 

                      function checkCertificateNo(inputParams){
                          var Errors = new Array("OK", "1", "2", "3", "4");
                              var certificateNo = inputParams[0];//$(" #IdentityCodeEdit ").val().trim();//身份证号码
                              if(certificateNo.length != 18){
                                    //alert("身份证号码无效,请使用第二代身份证!!!"); 
                                    return Errors[1];
                              }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("身份证号码无效,请又一次输入!!!");
                                           return Errors[2];
                                    }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+"!");
                                            return Errors[0];
                                        } else {
                                            // alert("身份证号码无效,请又一次输入!!!");
                                            return Errors[2];
                                            
                                        }
                                   }
                             }
                         }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值