JavaScript正则表达式验证身份证号
身份证号码包含15位全数字版本及18位末位带X的版本。本文详解如何使用JavaScript正则表达式准确识别这两种格式,并提供完整的函数示例,帮助开发者在前端快速实现身份证号合法性校验。
身份证号码的构成规则
在中国,居民身份证号码主要分为两种长度和格式:
- 15位旧版号码:全部由数字组成,无校验位。
- 18位新版号码:前17位为数字,第18位为校验码。该位可能是0-9之间的数字,也可能是代表罗马数字10的大写字母“X”。
在进行前端验证时,我们需要编写一个正则表达式来严格匹配上述两种情况,排除包含字母(除末尾X外)、特殊符号或长度不符的输入。
核心正则表达式解析
用于匹配身份证的正则表达式如下:
(^\d{15}$)|(^\d{17}([0-9]|X)$)
该表达式的逻辑拆解:
(^\d{15}$):匹配以15个数字开头并立即结束的行。这是15位身份证的标准格式。|:表示“或者”。(^\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前端表单校验的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













