在JavaScript中,使用正则表达式来校验身份证号码是一种常见的方法。中国的身份证号码由18位数字组成,前17位是基本信息,最后一位可以是数字或者字母X(表示10)。以下是一个用于校验身份证号码的正则表达式示例:
function validateIDCard(idCard) {
const regex = /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X|x)$/;
return regex.test(idCard);
}
// 使用示例
console.log(validateIDCard('11010519491231002X')); // 应该返回 true
console.log(validateIDCard('110105194912310021')); // 应该返回 false,因为最后一位应该是X或数字
这个正则表达式的组成部分解释如下:
^[1-9]
:第一位数字不能是0。\d{5}
:接下来的5位是地区码。(18|19|20)\d{2}
:年份部分,可以是1800-2099年。(0[1-9]|1[0-2])
:月份部分,01-12月。(0[1-9]|[12]\d|3[01])
:日期部分,01-31日。\d{3}
:顺序码。(\d|X|x)$
:校验码,可以是数字或者字母X/x。优势:
应用场景:
注意事项:
校验码计算示例: 校验码的计算涉及到权重因子和模运算,具体算法如下:
如果需要实现完整的身份证号码校验(包括校验码),可以参考以下代码:
function calculateCheckCode(idCard17) {
const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
const checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
let sum = 0;
for (let i = 0; i < 17; i++) {
sum += parseInt(idCard17[i], 10) * weights[i];
}
return checkCodes[sum % 11];
}
function validateIDCardFull(idCard) {
if (!validateIDCard(idCard)) {
return false;
}
const checkCode = calculateCheckCode(idCard);
return checkCode === idCard[17].toUpperCase();
}
// 使用示例
console.log(validateIDCardFull('11010519491231002X')); // 应该返回 true
这段代码首先使用之前的正则表达式检查格式,然后计算校验码并与身份证号码的最后一位进行比较,以确保身份证号码的完全有效性。
领取专属 10元无门槛券
手把手带您无忧上云