JavaScript正则表达式验证身份证号

江屿
江屿
发布时间:2026-10-13 | 2人浏览过
原创

身份证号码包含15位全数字版本及18位末位带X的版本。本文详解如何使用JavaScript正则表达式准确识别这两种格式,并提供完整的函数示例,帮助开发者在前端快速实现身份证号合法性校验。

身份证号码的构成规则

在中国,居民身份证号码主要分为两种长度和格式:

  • 15位旧版号码:全部由数字组成,无校验位。
  • 18位新版号码:前17位为数字,第18位为校验码。该位可能是0-9之间的数字,也可能是代表罗马数字10的大写字母“X”。

在进行前端验证时,我们需要编写一个正则表达式来严格匹配上述两种情况,排除包含字母(除末尾X外)、特殊符号或长度不符的输入。

核心正则表达式解析

用于匹配身份证的正则表达式如下:

(^\d{15}$)|(^\d{17}([0-9]|X)$)

该表达式的逻辑拆解:

  1. (^\d{15}$):匹配以15个数字开头并立即结束的行。这是15位身份证的标准格式。
  2. |:表示“或者”。
  3. (^\d{17}([0-9]|X)$):匹配以17个数字开头,接着是一个数字或字符“X”,然后立即结束的行。这覆盖了18位身份证的所有合法组合。

注意:X必须是大写,因为身份证系统中的校验码计算结果若为10,统一用大写X表示。

JavaScript验证函数实现

以下是基于上述正则的完整JavaScript验证函数。代码经过整理,修正了原稿中可能存在的缩进错误,并优化了逻辑结构。

function isIdCardNo(num) {
    // 将输入转换为大写,确保比较时不区分大小写问题(尽管只允许大写X)
    num = num.toUpperCase();
    
    // 定义正则表达式:15位全数字 OR 18位前17位数字+末位数字/X
    var reg = /(^\d{15}$)|(^\d{17}([0-9]|X)$)/;
    
    // 执行测试
    if (!reg.test(num)) {
        alert('输入的身份证号长度不对,或者号码不符合规定!\n15位号码应全为数字,18位号码末位可以为数字或X。');
        return false;
    }
    
    // 如果通过验证
    return true;
}

// 使用示例
if (isIdCardNo("11010519491012361X")) {
    console.log("验证成功");
}

注意事项与排错

在实际应用此正则验证时,需注意以下几点以确保准确性:

  • 大小写处理:用户输入可能包含小写“x”,因此在正则判断前务必使用 toUpperCase() 进行转换,否则可能被误判为非法字符。
  • 非功能性验证:此方法仅验证格式是否正确(即长度和字符类型)。它无法验证生日是否存在、地区代码是否真实有效,也无法检测假号。如需高精度校验,建议结合后端API或详细的身份证校验算法(如模11算法)进行二次验证。
  • 空值检查:在调用函数前,建议先检查输入是否为空字符串或null,避免正则引擎抛出意外错误或产生不必要的开销。

以上就是JavaScript使用正则表达式验证身份证号的详细内容,更多关于JavaScript前端表单校验的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表