checkIdNo(idCard) {
/*省,直辖市代码表*/
var provinceAndCitys = {
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 powers = [
'7',
'9',
'10',
'5',
'8',
'4',
'2',
'1',
'6',
'3',
'7',
'9',
'10',
'5',
'8',
'4',
'2',
];
/*第18位校检码*/
var parityBit = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
/*校验地址码*/
var checkAddressCode = function(addressCode) {
var check = /^[1-9]\d{5}$/.test(addressCode);
if (!check) return false;
if (provinceAndCitys[parseInt(addressCode.substring(0, 2))]) {
return true;
} else {
return false;
}
};
/*校验日期码*/
var checkBirthDayCode = function(birDayCode) {
var check = /^[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))$/.test(
birDayCode
);
if (!check) return false;
var yyyy = parseInt(birDayCode.substring(0, 4), 10);
var mm = parseInt(birDayCode.substring(4, 6), 10);
var dd = parseInt(birDayCode.substring(6), 10);
var xdata = new Date(yyyy, mm - 1, dd);
if (xdata < new Date(1900, 1, 1)) {
return false;
}
if (xdata > new Date()) {
return false; //生日不能大于当前日期
} else if (
xdata.getFullYear() == yyyy &&
xdata.getMonth() == mm - 1 &&
xdata.getDate() == dd
) {
return true;
} else {
return false;
}
};
/*计算校检码*/
var getParityBit = function(idCardNo) {
var id17 = idCardNo.substring(0, 17);
/*加权 */
var power = 0;
for (var i = 0; i < 17; i++) {
power += parseInt(id17.charAt(i), 10) * parseInt(powers[i]);
}
/*取模*/
var mod = power % 11;
return parityBit[mod];
};
/*验证校检码*/
var checkParityBit = function(idCardNo) {
var parityBit = idCardNo.charAt(17).toUpperCase();
if (getParityBit(idCardNo) == parityBit) {
return true;
} else {
return false;
}
};
/*校验15位或18位的身份证号码*/
var checkIdCardNo = function(idCardNo) {
//15位和18位身份证号码的基本校验
var check = /^\d{15}|(\d{17}(\d|x|X))$/.test(idCardNo);
if (!check) return false;
//判断长度为15位或18位
if (idCardNo.length == 15) {
return check15IdCardNo(idCardNo);
} else if (idCardNo.length == 18) {
return check18IdCardNo(idCardNo);
} else {
return false;
}
};
//校验15位的身份证号码
var check15IdCardNo = function(idCardNo) {
//15位身份证号码的基本校验
var check = /^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(
idCardNo
);
if (!check) return false;
//校验地址码
var addressCode = idCardNo.substring(0, 6);
check = checkAddressCode(addressCode);
if (!check) return false;
var birDayCode = '19' + idCardNo.substring(6, 12);
//校验日期码
return checkBirthDayCode(birDayCode);
};
//校验18位的身份证号码
var check18IdCardNo = function(idCardNo) {
//18位身份证号码的基本格式校验
var check = /^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}(\d|x|X)$/.test(
idCardNo
);
if (!check) return false;
//校验地址码
var addressCode = idCardNo.substring(0, 6);
check = checkAddressCode(addressCode);
if (!check) return false;
//校验日期码
var birDayCode = idCardNo.substring(6, 14);
check = checkBirthDayCode(birDayCode);
if (!check) return false;
//验证校检码
return checkParityBit(idCardNo);
};
return checkIdCardNo(idCard);
},
//附带一个获取出生日期的方法
getAgeAndBirth(idCard) {
console.log(idCard);
let birthday = '';
if (idCard != null && idCard != '') {
if (idCard.length == 15) {
birthday = '19' + idCard.slice(6, 12);
} else if (idCard.length == 18) {
birthday = idCard.slice(6, 14);
}
birthday = birthday.replace(/(.{4})(.{2})/, '$1-$2-');
//通过正则表达式来指定输出格式为:1990-01-01
}
return birthday;
},
ID card verification rule method, absolutely easy to use, try it yourself, hurry up and collect it, it is convenient for you and me
Guess you like
Origin blog.csdn.net/lbchenxy/article/details/109638756
Ranking