身份证号码的校验

身份证号码的正则表达式可以区分出18位和15位身份证号码,如下所示:

18位身份证号码格式:前6位为地址码,7到14位为出生日期码,15到17位为顺序码,18位为校验码。

```
^[1-9]\d{5}(19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$
```

15位身份证号码格式:前6位为地址码,7到12位为出生日期码,13到15位为顺序码。

```
^[1-9]\d{5}\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{2}$
```

注意:以上正则表达式只能验证身份证的格式是否正确,并不能保证身份证号码的真实性。身份证号码的校验规则在不同国家和地区可能存在差异,建议在具体使用中再做进一步验证。

以下是一个校验身份证号码的JavaScript函数:

function validateIdNumber(idNumber) {
  // 18位身份证号码的正则表达式
  var regExp18 = /^[1-9]\d{5}(19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
  
  // 15位身份证号码的正则表达式
  var regExp15 = /^[1-9]\d{5}\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{2}$/;
  
  // 如果身份证号码符合18位或15位的正则表达式,则进行校验
  if (regExp18.test(idNumber) || regExp15.test(idNumber)) {
    // 校验身份证号码的校验码是否正确
    if (idNumber.length == 18) {
      var sum = 0;
      var coefficient = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
      var parityCode = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
      for (var i = 0; i < 17; i++) {
        sum += parseInt(idNumber.charAt(i)) * coefficient[i];
      }
      var mod = sum % 11;
      if (parityCode[mod] !== idNumber.charAt(17).toUpperCase()) {
        // 身份证号码校验码不正确,返回false
        return false;
      }
    }
    // 身份证号码校验通过,返回true
    return true;
  } else {
    // 身份证号码格式不正确,返回false
    return false;
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值