身份证校验规则
2019/3/15 Javascript
把身份证校验规则整理一下,以后万一能用的到呢。。。
const powers = [
'7',
'9',
'10',
'5',
'8',
'4',
'2',
'1',
'6',
'3',
'7',
'9',
'10',
'5',
'8',
'4',
'2'
];
const parityBit = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
// 校验身份证号码的主调用
const validId18 = _id => {
let id = _id;
id += '';
const num = id.substr(0, 17);
const IparityBit = id.substr(17);
// let IparityBit = id.substr(17); // 如果允许小写x
let power = 0;
for (let i = 0; i < 17; i += 1) {
// 校验每一位的合法性
if (num.charAt(i) < '0' || num.charAt(i) > '9') {
return false;
}
// 加权
power += parseInt(num.charAt(i), 10) * parseInt(powers[i], 10);
}
// 取模
const mod = parseInt(power, 10) % 11;
//如果小写x也支持
// if(IparityBit==='x'){ IparityBit = 'X'; }
if (parityBit[mod] === IparityBit) {
return true;
}
return false;
};
function validId15(_id) {
let id = _id;
id += '';
for (let i = 0; i < id.length; i += 1) {
// 校验每一位的合法性
if (id.charAt(i) < '0' || id.charAt(i) > '9') {
return false;
}
}
const year = id.substr(6, 2);
const month = id.substr(8, 2);
const day = id.substr(10, 2);
// 校验年份位
if (year < '01' || year > '90') return false;
// 校验月份
if (month < '01' || month > '12') return false;
// 校验日
if (day < '01' || day > '31') return false;
return true;
}
/* eslint consistent-return: 0 */
function validId(_id) {
const id = _id;
if (id === '') return;
let valid = false;
if (id.length === 15) {
valid = validId15(id);
} else if (id.length === 18) {
valid = validId18(id);
}
return valid;
}
export default validId;