js校验身份证号
function validateIDCard(idCard) {
var pattern = /^[1-9]\d{5}(19|20)\d{2}(0\d|1[0-2])(0\d|1\d|2\d|3[01])\d{3}[\dX]$/;
if (!pattern.test(idCard)) {
return false;
}
var provinceCode = idCard.substring(0, 2);
var birthday = idCard.substring(6, 14);
var checkCode = idCard.substring(17);
if (!checkProvinceCode(provinceCode)) {
return false;
}
if (!checkBirthday(birthday)) {
return false;
}
if (!checkCheckCode(idCard)) {
return false;
}
return true;
}
function checkProvinceCode(provinceCode) {
var provinceCodes = ["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"];
return provinceCodes.includes(provinceCode);
}
function checkBirthday(birthday) {
var year = parseInt(birthday.substring(0, 4));
var month = parseInt(birthday.substring(4, 6));
var day = parseInt(birthday.substring(6, 8));
var date = new Date(year, month - 1, day);
return (date.getFullYear() === year && (date.getMonth() + 1) === month && date.getDate() === day);
}
function checkCheckCode(idCard) {
var factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
var checkCodes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
var sum = 0;
for (var i = 0; i < 17; i++) {
sum += parseInt(idCard.charAt(i)) * factors[i];
}
var index = sum % 11;
var checkCode = checkCodes[index];
return (checkCode === idCard.charAt(17));
}
console.log(validateIDCard("440524199801010014"));
console.log(validateIDCard("44052419980101001X"));
console.log(validateIDCard("44052419980101001x"));
console.log(validateIDCard("44052419980101001"));
console.log(validateIDCard("4405241998010100"));
console.log(validateIDCard("440524199801010011"));