银行卡校验
备注:小程序代码没加分号; 需要记得添加
bankCardValid(bankCardNum) {
let res = (bankCardNum + '').match(/[0-9]+/)
if (!res) return false
if (res[0].length < 13 && res[0].length > 19) return false
const lastNum = parseInt(bankCardNum.substr(bankCardNum.length - 1, 1), 10)
const first15Num = bankCardNum.substr(0, bankCardNum.length - 1)
const newArr = []
for (let i = first15Num.length - 1; i > -1; i--) {
newArr.push(parseInt(first15Num.substr(i, 1), 10))
}
const arrJiShu = [] // 奇数位*2的积 >9
let sumJiShu = 0 // 奇数位*2 < 9 的数组之和
let sumOuShu = 0 // 偶数位数组之和
for (let j = 0; j < newArr.length; j += 1) {
if ((j + 1) % 2 === 1) {
if (newArr[j] * 2 < 9) {
sumJiShu += newArr[j] * 2
} else {
arrJiShu.push(newArr[j] * 2)
}
} else {
sumOuShu += newArr[j]
}
}
let sumJiShuChild1 = 0 // 奇数位*2 >9 的分割之后的数组个位数之和
let sumJiShuChild2 = 0 // 奇数位*2 >9 的分割之后的数组十位数之和
for (let h = 0; h < arrJiShu.length; h++) {
sumJiShuChild1 += arrJiShu[h] % 10
sumJiShuChild2 += parseInt(arrJiShu[h] / 10, 10)
}
const sumTotal = sumJiShu + sumOuShu + sumJiShuChild1 + sumJiShuChild2
const k = sumTotal % 10 === 0 ? 10 : sumTotal % 10
const luhn = 10 - k
if (lastNum === luhn) {
return true
} else {
return false
}
},
身份证校验
identityCodeValid(_code) {
let code = _code;
// 身份证校验支持15位和18位,支持地址编码校验、出身日期、校验位校验
const city = {
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: '国外 ',
};
let pass = true;
if (!code ||
(!/^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/i.test(code) &&
!/^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}$/i.test(code))) {
// 身份证号格式错误
pass = false;
} else if (!city[code.substr(0, 2)]) {
// 地址编码错误
pass = false;
} else {
if (code.length === 18) {
code = code.split('');
// ∑(ai×Wi)(mod 11)
// 加权因子
const factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
// 校验位
const parity = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
let sum = 0;
let ai = 0;
let wi = 0;
for (let i = 0; i < 17; i++) {
ai = code[i];
wi = factor[i];
sum += ai * wi;
}
if (parity[sum % 11].toUpperCase() !== code[17].toUpperCase()) {
// 校验位错误
pass = false;
}
}
}
return pass;
},