/ 技术 / 62浏览

前端|JS验证身份证件信息函数

验证身份证件信息合法性JS函数

包括手机号验证和以下证件:

  • 居民身份证

  • 外国人居留证

  • 台湾居民来往内地通行证

  • 港澳居民来往内地通行证

  • 军官证

  • 护照

//证件类型 证件号码 校验
function CheckIdNumber(idType, idNumber) {
    switch (idType) {
        case "居民身份证":
            return isIDCard(idNumber);
        case "外国人居留证":
            return isGreenCard(idNumber);
        case "台湾居民来往内地通行证":
            return isTWCard(idNumber);
        case "港澳居民来往内地通行证":
            return isHKCard(idNumber);
        case "军官证":
            return isOfficerCard(idNumber);
        case "护照":
            return isPassPortCard(idNumber);
        default:
            return isIDCard(idNumber);
    }
}

//身份证 校验
function isIDCard(idCode) {
    idCode = idCode.toUpperCase();
    var dateReg = /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/;
    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 _birthday = idCode.substr(6, 8);
     _birthday = _birthday.substr(0,4) + '-' + _birthday.substr(4,2) + '-' + _birthday.substr(6,2);
    var pass = true;
    if(!/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$/i.test(idCode)){
        console.log('身份校验失败')
        pass = false;
    }else if(!city[idCode.substr(0,2)]){
        console.log('地址编码校验失败')
        pass = false;
    }else if(!dateReg.test(_birthday)){
        console.log('出生日期格式错误')
        pass = false;
    }else{
        //18位身份证需要验证最后一位校验位
        //加权因子
        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 sum = 0;
        for (var i = 0; i < 17; i++) {
            sum += idCode[i] * factor[i];
        }
        var last = parity[sum % 11];
        if(last != idCode[17]){
            console.log('校验位校验失败')
            pass = false;
        }
    }
    return pass;
}

//外国人居留证
function isGreenCard(idCode) {
    // 外国人居留证 外国人居留证规则,前三位字母后12为数字
    var reg = /^[a-zA-Z]{3}[0-9]{12}$/
    return reg.test(idCode);
}

//台胞证
function isTWCard(idCode) {
    // 规则: 新版8位或18位数字, 旧版10位数字 + 英文字母
    // 样本: 12345678 或 1234567890B
    var reg = /^\d{8}|^[a-zA-Z0-9]{10}|^\d{18}$/
    return reg.test(idCode);
}

//港澳通行证 校验
function isHKCard(idCode) {
    // 规则: H/M + 10位或6位数字
    // 样本: H1234567890
    var reg = /^([A-Z]\d{6,10}(\(\w{1}\))?)$/
    return reg.test(idCode);
}

//军官证 校验
function isOfficerCard(idCode) {
    // 规则: 军/兵/士/文/职/广/(其他中文) + "字第" + 4到8位字母或数字 + "号"
    // 样本: 军字第2001988号, 士字第P011816X号
    var reg = /^[\u4E00-\u9FA5](字第)([0-9a-zA-Z]{4,8})(号?)$/
    return reg.test(idCode);
}

//护照
function isPassPortCard(idCode) {
    // 护照
    // 规则: 14/15开头 + 7位数字, G + 8位数字, P + 7位数字, S/D + 7或8位数字,等
    // 样本: 141234567, G12345678, P1234567
    var reg = /^([a-zA-z]|[0-9]){5,17}$/;
    return reg.test(idCode);
}

//手机号码验证
function change_sjhm(v){
    if(!isPhoneNum(v)){
        iduo.msg.error("手机号码校验失败!");
    }
}


//手机号码 正则
function isPhoneNum(phone){
    var reg = /^1(3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[0-35-9])\d{8}$/;
    return reg.test(phone);
}

企业微信|Flask 网页授权登录API