function isValidChineseID(id) {
// 身份证号码为18位
if (id.length !== 18) {
return false;
}
// 前17位必须全为数字,最后一位可以是数字或X
if (!/^\d{17}(\d|X)$/i.test(id)) {
return false;
}
// 加权因子
const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
// 校验码对应值
const codes = "10X98765432";
// 计算校验码
const idArray = id.split('');
let sum = 0;
for (let i = 0; i < 17; i++) {
sum += idArray[i] * weights[i];
}
const lastCode = codes[sum % 11];
// 检验最后一位校验码是否正确
if (idArray[17].toUpperCase() !== lastCode) {
return false;
}
// 出生日期校验
const year = id.substring(6, 10);
const month = id.substring(10, 12);
const day = id.substring(12, 14);
const birthday = new Date(year + '-' + month + '-' + day);
if (birthday.getFullYear() != year ||
(birthday.getMonth() + 1) != month ||
birthday.getDate() != day) {
return false;
}
// 通过所有校验,返回true
return true;
}
console.log(isValidChineseID("你的身份证号码")) //true false