身份证号码(普通人、残疾人)——验证以及获取性别、出生日期

211 阅读1分钟

验证身份证号码格式

// 验证正则表达式
let idCardReg = null;
// 验证是否正确
let idCardRegValue = null;

验证居民身份证

  • 分为15与18位
if (zjhm && zjhm.length === 15) {
    // 兼容第一代身份证 15位
    idCardReg = /^[1-9]\d{7}(0[1-9]|1[0-2])([0-2][1-9]|[1-2]0|31)\d{3}$/;
    idCardRegValue = idCardReg.test(zjhm);
} else if (zjhm && zjhm.length === 18) {
    // 二代身份证
    idCardReg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
    idCardRegValue = idCardReg.test(zjhm);
} else {
    idCardRegValue = false;
}

验证残疾人证

  • 20位与22位
if (zjhm.length === 20) {
    // 残疾人证-20位
    idCardReg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx][1-7][1-4]$/;
    idCardRegValue = idCardReg.test(zjhm);
} else if (zjhm.length === 22) {
    // 补办残疾证-22位
    idCardReg = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx][1-7][1-4]B[1-9]$/;
    idCardRegValue = idCardReg.test(zjhm);
} else {
    idCardRegValue = false;
}

从身份证号码中获取性别

居民身份证性别

xb = zjhm.substr(-2, 1) % 2 ? '1' : '2';

残疾人身份证

  • 残疾人身份证后四位中,前2位表示残疾类别,后2位表示残疾等级
if (zjhm.length === 20) {
    // 残疾人证-20位
    xb = zjhm.substr(-4, 1) % 2 ? '1' : '2';
} else if (zjhm.length === 22) {
    // 补办残疾证-22位
    xb = zjhm.substr(-6, 1) % 2 ? '1' : '2';
}

根据身份证获取出生日期

  • 获取居民身份证的出生日期(兼容15位),残疾人的截取其中18位处理
getCsrq(zjhm) {
    let birth = '';
    if(zjhm){
        if(zjhm.length === 15){
            birth = '19' + zjhm.substr(6,6);
        } else if(zjhm.length === 18){
            birth = zjhm.substr(6,8);
        }
        birth = birth.replace(/(.{4})(.{2})/,'$1-$2-');
    }
    return birth;
}

image.png

残疾人身份证获取出生日期

去掉后四位,然后调用居民身份证获取出生日期的方法

this.getCsrq(value.substr(0, 18));