首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js 正则校验身份证号码

在JavaScript中,使用正则表达式来校验身份证号码是一种常见的方法。中国的身份证号码由18位数字组成,前17位是基本信息,最后一位可以是数字或者字母X(表示10)。以下是一个用于校验身份证号码的正则表达式示例:

代码语言:txt
复制
function validateIDCard(idCard) {
  const regex = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X|x)$/;
  return regex.test(idCard);
}

// 使用示例
console.log(validateIDCard('11010519491231002X')); // 应该返回 true
console.log(validateIDCard('110105194912310021')); // 应该返回 false,因为最后一位应该是X或数字

这个正则表达式的组成部分解释如下:

  • ^[1-9]:第一位数字不能是0。
  • \d{5}:接下来的5位是地区码。
  • (18|19|20)\d{2}:年份部分,可以是1800-2099年。
  • (0[1-9]|1[0-2]):月份部分,01-12月。
  • (0[1-9]|[12]\d|3[01]):日期部分,01-31日。
  • \d{3}:顺序码。
  • (\d|X|x)$:校验码,可以是数字或者字母X/x。

优势

  • 快速:正则表达式可以在短时间内完成校验。
  • 简洁:用一行代码就可以实现复杂的校验逻辑。

应用场景

  • 用户注册时校验身份证号码格式。
  • 在线表单提交前的客户端校验。
  • 数据清洗和预处理时验证身份证号码的有效性。

注意事项

  • 上述正则表达式只校验格式,不校验地区码、出生日期的有效性以及校验码的正确性。
  • 如果需要更严格的校验,可以结合地区码数据库、出生日期范围检查以及校验码算法(如ISO 7064:1983.MOD 11-2)进行综合校验。

校验码计算示例: 校验码的计算涉及到权重因子和模运算,具体算法如下:

  1. 权重因子为:[7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
  2. 将身份证号码前17位与权重因子对应相乘后求和。
  3. 将求和结果除以11得到余数。
  4. 根据余数查找对应的校验码:[1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2]

如果需要实现完整的身份证号码校验(包括校验码),可以参考以下代码:

代码语言:txt
复制
function calculateCheckCode(idCard17) {
  const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
  const checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
  let sum = 0;
  for (let i = 0; i < 17; i++) {
    sum += parseInt(idCard17[i], 10) * weights[i];
  }
  return checkCodes[sum % 11];
}

function validateIDCardFull(idCard) {
  if (!validateIDCard(idCard)) {
    return false;
  }
  const checkCode = calculateCheckCode(idCard);
  return checkCode === idCard[17].toUpperCase();
}

// 使用示例
console.log(validateIDCardFull('11010519491231002X')); // 应该返回 true

这段代码首先使用之前的正则表达式检查格式,然后计算校验码并与身份证号码的最后一位进行比较,以确保身份证号码的完全有效性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券