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

js校验身份证

在JavaScript中校验身份证号码通常涉及到正则表达式和一些逻辑判断。以下是一个基础的身份证校验方法:

身份证号码基础概念

中国的居民身份证号码是18位的数字,前17位是本体码,最后一位是校验码。前6位表示地址码,中间8位是出生日期码,再接下来的3位是顺序码,最后一位是根据前17位计算出来的校验码。

校验优势

  • 准确性:通过算法可以较为准确地验证身份证号码的有效性。
  • 实时性:客户端校验可以即时反馈结果,提升用户体验。
  • 减轻服务器压力:前端校验可以减少不必要的后端请求。

校验类型

主要分为格式校验和校验码校验两部分:

  1. 格式校验:检查身份证号码是否符合18位的格式要求,以及出生日期是否合法。
  2. 校验码校验:根据国家标准GB 11643-1999计算校验码,验证最后一位是否正确。

应用场景

  • 用户注册时验证身份信息。
  • 在线支付等需要验证用户身份的场景。
  • 数据录入时的自动校验。

校验代码示例

代码语言:txt
复制
function validateIDCard(idCard) {
    const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
    if (!reg.test(idCard)) {
        return false;
    }

    // 加权因子
    const weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
    // 校验码对应值
    const checkCode = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];

    let sum = 0;
    for (let i = 0; i < 17; i++) {
        sum += parseInt(idCard.charAt(i), 10) * weight[i];
    }
    const mod = sum % 11;
    const lastChar = idCard.charAt(17).toUpperCase();
    return checkCode[mod] === lastChar;
}

// 使用示例
console.log(validateIDCard('11010519491231002X')); // 应输出 true 或 false

常见问题及解决方法

  1. 格式错误:用户输入非数字或长度不对,通过正则表达式可以捕获这类错误。
  2. 校验码错误:可能是用户输入错误或计算算法实现有误,确保算法实现与国家标准一致。
  3. 出生日期非法:虽然正则表达式部分检查了日期格式,但还需要进一步验证日期是否真实存在,比如2月30日是不存在的。

解决方法

  • 使用上述代码进行前端校验。
  • 对于特殊情况(如历史遗留的15位身份证号码),需要进行额外的转换和校验。
  • 在后端也进行相应的校验,以确保数据的安全性和准确性。

通过这种方式,可以在前端有效地过滤掉大部分错误的身份证号码,提升用户体验并减轻服务器的压力。

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

相关·内容

共10个视频
尚硅谷JS模块化教程/视频/视频.zip/视频
腾讯云开发者课程
领券