js实现完美身份证号有效性验…

最近需要对身份证合法性进行验证,实名验证是不指望了,不过原来的验证规则太过简单,只是简单的验证了身份证长度,现在业务需要加强下身份证验证规则,网上找到了不少资料,不过都不合偶的心意,无奈只好直接写一个,代码还是用自己的舒服哈

已实现功能:支持15位和18位身份证号,支持地址编码、出生日期、校验位验证 

代码如下:


// 身份证号合法性验证 
//
支持15位和18位身份证号
//
支持地址编码、出生日期、校验位验证
                function  IdentityCodeValid(code) 
                        var  city={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  tip  "";
                        var  pass=  true;
                       
                        if(!code  ||  !/^d{6}(18|19|20)?d{2}(0[1-9]|1[12])(0[1-9]|[12]d|3[01])d{3}(d|X)$/i.test(code)){
                                tip  "身份证号格式错误";
                                pass  false;
                        }
                       
                      else  if(!city[code.substr(0,2)]){
                                tip  "地址编码错误";
                                pass  false;
                        }
                        else{
                                // 18位身份证需要验证最后一位校验位
                                if(code.length  ==  18){
                                        code  code.split('');
                                        // ∑(ai×Wi)(mod 11)
                                        // 加权因子
                                        var  factor  7,  9,  10,  5,  8,  4,  2,  1,  6,  3,  7,  9,  10,  5,  8,  4,  ];
                                        // 校验位
                                        var  parity  1,  0,  'X',  9,  8,  7,  6,  5,  4,  3,  ];
                                        var  sum  0;
                                        var  ai  0;
                                        var  wi  0;
                                        for  ( var  0;  17;  i++)
                                        {
                                                ai  code[i];
                                                wi  factor[i];
                                                sum  +=  ai  wi;
                                        }
                                        var  last  parity[sum  11];
                                        if(parity[sum  11]  !=  code[17]){
                                                tip  "校验位错误";
                                                pass  = false;
                                        }
                                }
                        }
                        if(!pass)  alert(tip);
                        return  pass;
                }
                var  '130981199312253466';
              var  res=  IdentityCodeValid(c);

       alert(res); 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值