资讯专栏INFORMATION COLUMN

javascript身份证号码校验

Meathill / 1759人阅读

摘要:由于项目需要,代码需要验证身份证,摸索着学习,写了一个验证函数,直接上代码省级地址华北北京,天津,河北,山西,内蒙古东北辽宁,吉林,黑龙江华东上海,江苏,浙江,安徽,福建,江西,山东华中河南,湖北,湖南华南广东,广西,海南西南四川,贵州,云

由于项目需要,代码需要验证身份证,摸索着学习,写了一个验证函数,直接上代码:

省级地址:

华北: 北京11,天津12,河北13,山西14,内蒙古15
东北: 辽宁21,吉林22,黑龙江23
华东: 上海31,江苏32,浙江33,安徽34,福建35,江西36,山东37
华中: 河南41,湖北42,湖南43
华南: 广东44,广西45,海南46
西南: 四川51,贵州52,云南53,西藏54,重庆50
西北: 陕西61,甘肃62,青海63,宁夏64,新疆65
特别: 台湾71,香港81,澳门82

校验规则按级来划分:

1.后四位生成码,这几位码的生成规则请自行百度,官方给了一个公式和表
2.年月日
3.前六位代表区域的值
// 验证后四位生成码
let checkCode = function (val) {
    var p = /^[1-9]d{5}(18|19|20)d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)d{3}[0-9Xx]$/;
    var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    var parity = [1, 0, "X", 9, 8, 7, 6, 5, 4, 3, 2];
    var code = val.substring(17);
    if (p.test(val)) {
        var sum = 0;
        for (var i = 0; i < 17; i++) {
            sum += val[i] * factor[i];
        }
        if (parity[sum % 11] == code.toUpperCase()) {
            return true;
        }
    }
    return false;
}
// 验证年月日
let checkDate = function (val) {
    var pattern = /^(18|19|20)d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)$/;
    if (pattern.test(val)) {
        var year = val.substring(0, 4);
        var month = val.substring(4, 6);
        var date = val.substring(6, 8);
        var date2 = new Date(year + "-" + month + "-" + date);
        if (date2 && date2.getMonth() == (parseInt(month) - 1)) {
            return true;
        }
    }
    return false;
}
// 验证地区区域辖区的值
let checkProv = function (val) {
    let pattern = /^[1-9][0-9]/;
    let provs = {
        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: "澳门"
    };
    if (pattern.test(val)) {
        if (provs[val]) {
            return true;
        }
    }
    return false;
}

验证:

let checkID = function (val) {
    if (checkCode(val)) {
        var date = val.substring(6, 14);
        if (checkDate(date)) {
            if (checkProv(val.substring(0, 2))) {
                return true;
            }
        }
    }
    return false;
}
checkID("身份证号");

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/100819.html

相关文章

  • 份证号码的正则表达式及验证详解(JavaScript,Regex)

    摘要:简言在做用户实名验证时,常会用到身份证号码的正则表达式及校验方案。身份证号码说明居民身份证号码,正确正式的称谓应该是公民身份号码。也有说法表述开头是外国人取得中国身份证号码的前两位编码,但本人并未得到证实。 简言 在做用户实名验证时,常会用到身份证号码的正则表达式及校验方案。本文列举了两种验证方案,大家可以根据自己的项目实际情况,选择适合的方案。 showImg(https://seg...

    laznrbfe 评论0 收藏0
  • JavaScript 18位份证验证及份证号码规则

    摘要:如果余数是,身份证的最后一位号码就是。举例某男性的身份证号码是。我们要看看这个身份证是不是合法的身份证。首先我们得出前位的乘积和然后再求余最后通过对应规则就可以知道余数对应的数字是。 18位身份证号码各位的含义 1-2位省、自治区、直辖市代码;3-4位地级市、盟、自治州代码;5-6位县、县级市、区代码;7-14位出生年月日,比如19670401代表1967年4月1日;15-17位为顺序...

    MasonEast 评论0 收藏0
  • 原生JavaScript校验份证号是否正确

    摘要:输入的身份证号长度不对,或者号码不符合规定校验位按照的规定生成,可以认为是数字。检查生日日期是否正确输入的身份证号里出生日期不对输入的身份证号里出生日期不对检验位身份证的校验码是否正确。 function idcardCheck(num) { var errstr=; num=num.toString(); num...

    AlphaGooo 评论0 收藏0
  • JavaScript常用脚本集锦7

    摘要:将加法和加上校验位能被整除。下面分别分析出生日期和校验位检查生日日期是否正确输入的身份证号里出生日期不对将位身份证转成位校验位按照的规定生成,可以认为是数字。校验位按照的规定生成,可以认为是数字。表示全部为中文为不全是中文,或没有中文。 判断是否是合理的银行卡卡号 //Description: 银行卡号Luhm校验 //Luhm校验规则:16位银行卡号(19位通用): // 1.将...

    lindroid 评论0 收藏0
  • 15位、18位份证号码正则表达式

    摘要:例也可通过验证,而月并不存在日校验码是由位本体码计算得出,方案并未校验此码这个链接中的位正则表达式错的,最后顺序码应该是位。 身份证正则表达式 在项目中遇到身份证号码验证,百度了一些资料,太简单的和太复杂的pass,综合了一些案例,取长补短,形成了个折中版本的,正则表达式如下: var reg =/(^[1-9]d{5}(18|19|([23]d))d{2}((0[1-9])|(10|...

    galois 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<