JS完美检验(计算)身份证号格式

// 校验身份证号
const oncheck = (idCard) => {
    const regIdCard = /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/; // 正则表达式
    if (regIdCard.test(idCard)) {
      if (idCard.length === 18) {
        const idCardWi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
        const idCardY = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]; 
        let idCardWiSum = 0;
        for (let i = 0; i < 17; i += 1) {
          idCardWiSum += idCard.substring(i, i + 1) * idCardWi[i];
        }
        const idCardMod = idCardWiSum % 11; 
        const idCardLast = idCard.substring(17); // 得到最后一位身份证号码
        // 如果等于2,则说明校验码是10,身份证号码最后一位应该是X
        if (idCardMod === 2) {
          if (idCardLast === 'X' || idCardLast === 'x') {
            console.log('检验成功');
          } else {
            console.log('检验失败');
          }
        } else if (idCardLast === idCardY[idCardMod].toString()) {
          // 请仔细阅读下面的特别注意
          console.log('检验成功');
        } else {
         console.log('检验失败');
        }
      }
    } else {
      console.log('检验失败');
    }
  };

特别注意:
这里的idCardY[idCardMod]是数值型,idCardLast 是字符串,这个时候需要类型转换,不然得到的结果永远都是false,我是直接在网上找的算法,发现都有这个问题,这也是我找了一早上才找到原因!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值