function validateIDCard(id) {
// 身份证号码长度校验
if (id.length !== 18) {
return false;
}
// 出生日期校验
const birthYear = id.substring(6, 10);
const birthMonth = id.substring(10, 12);
const birthDay = id.substring(12, 14);
const birthDate = new Date(`${birthYear}-${birthMonth}-${birthDay}`);
// 校验日期是否有效
if (birthDate.getFullYear() !== parseInt(birthYear, 10) ||
birthDate.getMonth() + 1 !== parseInt(birthMonth, 10) ||
birthDate.getDate() !== parseInt(birthDay, 10)) {
return false;
}
// 校验最后一位校验码
const factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
const parity = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
let sum = 0;
for (let i = 0; i < 17; i++) {
sum += id[i] * factor[i];
}
const mod = sum % 11;
return parity[mod] === id[17].toUpperCase();
}
// 示例
console.log(validateIDCard('11010519491231002X')); // true
console.log(validateIDCard('123456789012345678')); // false
这段代码提供了一个简单的身份证号码验证的JavaScript实现。它首先检查身份证号码的长度是否为18位,然后验证出生日期是否合法(即日期是否真实存在),最后通过计算校验码来验证身份证号码的最后一位是否正确。注意,这里假设输入的身份证号码都是18位的,对于15位的老身份证号码未做处理。