加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

大陆身份证号码正则验证js脚本

发布时间:2020-12-14 01:23:16 所属栏目:百科 来源:网络整理
导读:以下是我的验证出生日期1940-2015大陆身份证号的js脚本,对 18 位身份证号有校验码的验证,但15位的只是做了基础性的位数和出生年月日的验证。如果谁能理出前六位的列表就更好了,如果有什么更好的方法请提出来,大家一块探讨一下。 String.prototype.isCard
以下是我的验证出生日期1940-2015大陆身份证号的js脚本,对 18 位身份证号有校验码的验证,但15位的只是做了基础性的位数和出生年月日的验证。如果谁能理出前六位的列表就更好了,如果有什么更好的方
法请提出来,大家一块探讨一下。
    String.prototype.isCardId = function() {
        var v  = this;
        if(v.length!=18&&v.length!=15){
            return false;
        }
        var reg = /^d{6}((?:19)?[4-9][0-9]|20(?:0[0-9]|1[0-5]))((?:0[1-9]|1[012])(?:0[1-9]|[12][0-9])|(?:0[13578]|1[02])(?:3[01])|(?:0[469]|11)(?:30))[0-9]{2,3}[0-9xX]?$/ ;

        var b = reg.test(v);
        if(!b){
            return false;
        }
        var y = RegExp.$1;
        var md = RegExp.$2;
        console.info(y+"-"+md);
        if("0229"==md.trim()){
            y = parseInt(y,10);
            if(y<1900){
                y +=1900;
            }
            if(y%400!=0&&y%4!=0){
                return false;
            }
        }


        if (v.length == 18) {
            var byNum = [7,9,10,5,8,4,2,1,6,3,7,2];
            var lastNum = [1,'X',2];
            var cardArray = v.split("");
            var sum = 0;
            for (var i = 0; i < byNum.length; i++) {
                sum += byNum[i] * cardArray[i];
            }
            if (lastNum[sum % 11] != (""+cardArray[17]).toUpperCase()) {
                return false;
            }
        }

        return true;
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读