js 身份证校验 15位和18位

/校验身份证号码
function checkIdCardNo(checkObj) {
    var idCardNo = checkObj.value;
    return verifyIdCardNo(idCardNo);
}

校验身份证号码
function verifyIdCardNo(idCardNo){
    if(idCardNo){
        var idNo = trim(idCardNo);
        if (idNo.length == 15 && if15IdCardNo(idNo)) {
            return true;
        } else if (idNo.length == 18 && if18IdCardNo(idNo)) {
            return true;
        }
    }
    return false;
}

// 15位身份证,只有数字
function if15IdCardNo(idCardNo) {
    var reg15 = /^\d{15}$/;
    if (reg15.test(idCardNo)) {
        return true;
    }
    return false;
}

//18位身份证,前17位仅允许上传数字,第18位检验位允许数字或“X”(大写)
function if18IdCardNo(idCardNo) {
    var reg18 = /^\d{17}[0-9X]$/;

    if (reg18.test(idCardNo) && idCardNo.substr(17, 1) == calculate18thInIdCardNo(idCardNo)) {
        return true;
    }
    return false;
}

// 计算18位身份证第18位的校验码
function calculate18thInIdCardNo(idCardNo) {
    // 权
    var WI = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
    // 校验码
    var JYM = [ '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' ];
    var S = 0;
    for (var i = 0; i < 17; i++) {
        S += WI[i] * idCardNo.substr(i, 1);
    }
    var Y = S % 11
    return JYM[Y];
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值