JavaScript ·
JavaScript验证身份证号码
JavaScript验证身份证号码
1、15位居民身份证号码转为18位保证可以通过位数验证
/**
* 15位转18位身份证号
* @param obj
* @returns {string|*}
*/
function changeFivteenToEighteen(obj) {
if (obj.length === 15) {
let arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
let arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2')
let cardTemp = 0
let k
obj = obj.substr(0, 6) + '19' + obj.substr(6, obj.length - 6)
for (k = 0; k < 17; k++) {
cardTemp += obj.substr(k, 1) * arrInt[k]
}
obj += arrCh[cardTemp % 11]
return obj
}
return obj
}
2、传入居民身份证号码,通过算法进行验证,居民身份证号码介绍及其算法
/**
* 验证身份证号码
* @param num
* @returns {boolean}
*/
export function isIdNumber(num) {
// 15位和18位身份证号码的正则表达式
let regIdCard = /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[X])$)$/;
// 如果通过该验证,说明身份证格式正确,但准确性还需计算
if (regIdCard.test(num)) {
if (num.length === 15) {
num = changeFivteenToEighteen(num)
}
if (num.length === 18) {
let idCardWi = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); // 将前17位加权因子保存在数组里
let idCardY = new Array(1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2); // 这是除以11后,可能产生的11位余数、验证码,也保存成数组
let idCardWiSum = 0; // 用来保存前17位各自乖以加权因子后的总和
for (let i = 0; i < 17; i++) {
idCardWiSum += num.substring(i, i + 1) * idCardWi[i];
}
let idCardMod = idCardWiSum % 11; // 计算出校验码所在数组的位置
let idCardLast = num.substring(17); // 得到最后一位身份证号码
// 如果等于2,则说明校验码是10,身份证号码最后一位应该是X
if (idCardMod === 2) {
return idCardLast == "X";
} else {
// 用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码
return idCardLast == idCardY[idCardMod];
}
}
} else {
return false;
}
}