下面是“JS前后端实现身份证号验证代码解析”的完整攻略。
前言
身份证号是人们最常用的个人身份证明,因此在各个业务场景中,我们经常需要对输入的身份证号进行格式验证。本文将介绍如何使用 JavaScript 在前后端实现身份证号验证,帮助开发者更好地应对业务需求。
方案概述
实现身份证号验证的主要过程如下:
- 在前端通过 JavaScript 判断用户输入的身份证号是否符合规范;
- 将用户输入的身份证号传递至后端进行二次验证;
- 后端利用正则表达式和校验码规则等方式对身份证号进行验证;
- 返回验证结果给前端。
前端验证代码示例
我们可以在前端利用正则表达式判断用户输入的身份证号是否符合规范。下面是一个简单的代码示例:
function checkIdNumber(idNumber) {
// 18位身份证号正则表达式验证
var reg = /^[1-9]\d{5}(19|20)\d{2}(0\d|1[0-2])([0-2]\d|3[01])\d{3}[\dX]$/;
if (!reg.test(idNumber)) {
return false;
}
return true;
}
上述代码中,checkIdNumber
函数利用正则表达式对输入的身份证号进行验证。该正则表达式匹配的是 18 位身份证号的格式。其中,
^[1-9]\d{5}
表示以非零开头的六位数字开始;(19|20)\d{2}
表示出生年份的范围为 1900 到 2099 年;(0\d|1[0-2])([0-2]\d|3[01])
表示出生月份和日期的范围;\d{3}[\\dX]
表示最后一位为数字或 X,用来校验身份证号的最后一位验证码。
如果输入的身份证号匹配该正则表达式,则返回true
,否则返回false
。
示例代码中只验证了身份证号是否符合格式规范,而未校验身份证号的真实性。为了更加准确地判断身份证号的真实性,我们还需要在后端进行二次验证。
后端验证代码示例
在后端通过身份证号验证时,我们需要使用正则表达式和身份证号中的各个字段来判断其真实性。下面是一个使用 JavaScript 实现的身份证号校验函数示例:
function checkIdNumber(idNumber) {
// 长度验证
if (idNumber.length != 18) {
return false;
}
// 地区码验证
var areaCode = idNumber.substr(0, 2);
var allAreaCodes = [
"11","12","13","14","15","21","22","23","31","32","33","34","35","36","37","41","42","43","44","45","46","50","51","52","53","54","61","62","63","64",
"65","71","81","82","91"
];
if (allAreaCodes.indexOf(areaCode) < 0) {
return false;
}
// 年月日验证
var year = parseInt(idNumber.substr(6, 4));
var month = parseInt(idNumber.substr(10, 2));
var day = parseInt(idNumber.substr(12, 2));
var date = new Date(year, month - 1, day);
if (
date.getFullYear() != year ||
date.getMonth() + 1 != month ||
date.getDate() != day
) {
return false;
}
// 校验码验证
var checkCode = idNumber.substr(17, 1);
var idNumberWithoutCode = idNumber.substr(0, 17);
var weightedFactors = [
7,
9,
10,
5,
8,
4,
2,
1,
6,
3,
7,
9,
10,
5,
8,
4,
2,
];
var checkCodeValues = [
"1",
"0",
"X",
"9",
"8",
"7",
"6",
"5",
"4",
"3",
"2",
];
var weightedSum = 0;
for (var i = 0; i < idNumberWithoutCode.length; i++) {
weightedSum +=
parseInt(idNumberWithoutCode[i]) * weightedFactors[i];
}
var modValue = weightedSum % 11;
if (checkCodeValues[modValue] != checkCode) {
return false;
}
return true;
}
上述代码中,首先对身份证号长度进行验证,判断其是否为 18 位。然后,对身份证号中的地区码进行验证,判断其是否为有效的行政区划代码。接下来,对身份证号的出生日期进行验证,判断其是否为有效的日期。最后,使用身份证号前 17 位数和相应的权值因子进行校验码计算,核对身份证号的校验码是否正确。
该函数通过判断身份证号各字段的真实性,实现了对身份证号真实性的校验。
结论
身份证号验证是业务中经常需要用到的功能。本文通过前后端结合的方式实现了身份证号的验证,为开发者实现该功能提供了参考。开发者可以根据业务需求,选择前端、后端或前后端结合的方式来实现身份证号验证。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS前后端实现身份证号验证代码解析 - Python技术站