JavaScript实现身份证号码校验算法详解
在Web开发中,确保用户输入的身份证号码合法是防止无效数据入库的关键步骤。JavaScript提供了灵活的正则表达式和字符串处理能力,可以高效地完成15位旧版身份证与18位新版身份证的格式校验及真伪验证。本文将深入解析验证算法的核心逻辑。
验证目标与核心逻辑
身份证验证通常包含四个层面的检查:
- 长度校验:区分15位(纯数字)和18位(前17位数字+最后一位数字或'X')。
- 格式校验:除最后一位外,必须全部为数字;18位身份证最后一位若为'X'需转换为大写处理。
- 日期校验:提取年份、月份、日期,并验证其是否为真实的日历日期(如闰年2月29日等)。
- 校验码校验:利用ISO 7064:1983.MOD 11-2校验码系统,通过加权因子计算最后一位是否匹配。
准备条件与常量定义
在编写验证函数前,需要定义加权因子数组和校验位映射数组。这些数据遵循国家标准GB 11643-1999。
第1步:定义校验常量
进入代码编辑器,定义以下全局常量,以便后续复用:
wi:加权因子数组,用于18位身份证前17位的计算。[7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]arrVerifyCode:校验位对应表。[1, 0, "x", 9, 8, 7, 6, 5, 4, 3, 2]Checker:辅助校验数组(部分实现中使用)。[1, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1]
真实操作顺序:编写验证函数
第2步:执行长度与基础格式检查
首先判断输入ID的长度,并统一处理15位向18位的转换逻辑。15位身份证缺少年份的前两位(默认为19xx),需补全后参与后续校验。
var certCardValid = function(id) {
// 长度必须为15或18
if (id.length != 15 && id.length != 18) {
alert("错误:身份证号共有15位或18位。");
return false;
}
var ai = "";
// 15位身份证转换为18位基准
if (id.length == 18) {
ai = id.substring(0, 17);
} else {
ai = id.slice(0, 6) + "19" + id.slice(6, 16);
}
接着,使用正则表达式确保前17位均为数字:
if (!/^\d+$/.test(ai)) {
alert("错误:除最后一位外,必须为数字。");
return false;
}
第3步:验证日期合法性
提取年月日信息,并通过 Date 对象验证其有效性。此步骤能识别如“2023年2月30日”这样的非法日期。
var yyyy = ai.slice(6, 10);
var mm = ai.slice(10, 12) - 1; // 月份从0开始
var dd = ai.slice(12, 14);
var d = new Date(yyyy, mm, dd);
// 验证日期是否回滚或被修正(例如输入2月30日会变成3月2日)
if (d.getFullYear() != yyyy || d.getMonth() != mm || d.getDate() != dd) {
alert("错误:无效日期。");
return false;
}
第4步:计算加权因子并比对校验码
这是最核心的算法步骤。将前17位(或15位补全后的前17位)分别乘以对应的加权因子,求和后对11取模,得到的余数即为校验位索引,最终字符应与输入的最后一位一致。
var ret = 0;
for (var i = 0; i < 17; i++) {
ret += ai.charAt(i) * wi[i];
}
// 添加校验位到计算值
ai += arrVerifyCode[ret % 11];
ai = ai.toUpperCase(); // 确保末尾为'X'时大写匹配
// 最终比对
if (id.length == 18 && id != ai) {
alert("错误:校验码无效。");
return false;
} else if (id.length == 15) {
// 15位身份证无需比对最后校验位,只需通过上述检查即可视为格式正确
return true;
} else {
return true;
}
};
完成判断
当函数返回 true 时,表示该身份证号码符合长度、格式、日期及校验码的所有标准。如果返回 false,浏览器会弹出相应的错误提示框,指出具体是哪一部分校验失败。在实际项目中,建议将 Ext.MessageBox.alert 替换为更友好的前端UI反馈组件(如Toast或Inline Error)。
简要总结
通过上述步骤,我们构建了一个健壮的JavaScript身份证验证工具。它不仅能过滤明显的输入错误,还能通过算法验证身份证的真实性。这种前端校验策略能有效减少服务器压力,提升用户体验。需要注意的是,前端验证仅用于提升体验,后端仍应进行同样严格的二次校验以确保数据安全。
以上就是JavaScript验证身份证号完整方法的详细内容,更多关于前端数据校验的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













