JS完整精确身份证校验
时间: 2023-08-11 18:55:00 浏览: 47
完整精确的身份证校验应该包括以下内容:
1. 身份证号码格式校验:长度、前17位是否为数字、最后一位是否为数字或大写字母X。
2. 地区码校验:前2位是否为有效的省、直辖市、自治区或特别行政区代码。
3. 出生日期码校验:第7~14位是否为有效的日期格式。
4. 校验码计算:根据前17位数字和加权因子计算校验码,并与身份证号码的第18位进行比较。
下面的JS代码可以实现完整精确的身份证校验:
```javascript
function isValidIdCard(idCard) {
var areaCode = [
// 省、直辖市代码表
'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'
];
var factor = [
// 加权因子表
7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2
];
var checkCode = [
// 校验码表
'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'
];
var idCardNo = idCard.toString().toUpperCase();
// 身份证号码格式校验
if (!/^\d{17}(\d|X)$/.test(idCardNo)) {
return false;
}
// 地区码校验
if (areaCode.indexOf(idCardNo.substr(0, 2)) === -1) {
return false;
}
// 出生日期码校验
var year = idCardNo.substr(6, 4),
month = idCardNo.substr(10, 2),
day = idCardNo.substr(12, 2),
birthday = new Date(year + '/' + month + '/' + day);
if (birthday.getFullYear() != year ||
(birthday.getMonth() + 1) != month ||
birthday.getDate() != day) {
return false;
}
// 校验码计算
var sum = 0;
for (var i = 0; i < 17; i++) {
sum += parseInt(idCardNo.charAt(i)) * factor[i];
}
var mod = sum % 11;
if (checkCode[mod] != idCardNo.charAt(17)) {
return false;
}
return true;
}
```
使用方法:
```javascript
console.log(isValidIdCard('110101199003074518')); // true
console.log(isValidIdCard('11010119900307451X')); // true
console.log(isValidIdCard('11010119900307')); // false
console.log(isValidIdCard('110101199003074519')); // false
console.log(isValidIdCard('310101199003074518')); // true
console.log(isValidIdCard('31010119900307451X')); // true
console.log(isValidIdCard('31010119900307')); // false
console.log(isValidIdCard('310101199003074519')); // false
console.log(isValidIdCard('88888888888888888X')); // false
```
注意:该校验方法仅适用于大陆居民身份证号码。