const isCardID = (sId) => {
var aCity = {
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 iSum = 0;
if (!/^\d{17}(\d|x)$/i.test(sId))
return '你输入的身份证长度或格式错误';
sId = sId.replace(/x$/i, 'a');
if (aCity[parseInt(sId.substr(0, 2))] == null)
return '你的身份证地区非法';
var sBirthday =
sId.substr(6, 4) +
'-' +
Number(sId.substr(10, 2)) +
'-' +
Number(sId.substr(12, 2));
var d = new Date(sBirthday.replace(/-/g, '/'));
if (
sBirthday !=
d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate()
)
return '身份证上的出生日期非法';
for (var i = 17; i >= 0; i--)
iSum += (Math.pow(2, i) % 11) * parseInt(sId.charAt(17 - i), 11);
if (iSum % 11 != 1) return '你输入的身份证号非法';
return true;
};
const handleblurIdcard = (card) => {
if (formModel.id_card_type != '1') {
return;
}
if (!card) return false;
if (isCardID(formModel.id_card) == true) {
let num = card;
if (!/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num)) {
return false;
}
let re;
let birthday;
let sex;
const len = num.length;
if (len === 15) {
birthday = `19${card.substring(6, 8)}-${card.substring(
8,
10
)}-${card.substring(10, 12)}`;
sex = parseInt(card.substr(14, 1), 10) % 2 === 1 ? 'M' : 'F';
re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
const arrSplit = num.match(re);
const dtmBirth = new Date(
`19${arrSplit[2]}/${arrSplit[3]}/${arrSplit[4]}`
);
const bGoodDay =
dtmBirth.getFullYear() === Number(arrSplit[2]) &&
dtmBirth.getMonth() + 1 === Number(arrSplit[3]) &&
dtmBirth.getDate() === Number(arrSplit[4]);
if (!bGoodDay) {
return false;
}
const arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
const arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
let nTemp = 0;
let i;
num = `${num.substr(0, 6)}19${num.substr(6, num.length - 6)}`;
for (i = 0; i < 17; i++) {
nTemp += num.substr(i, 1) * arrInt[i];
}
num += arrCh[nTemp % 11];
} else if (len === 18) {
birthday = `${card.substring(6, 10)}-${card.substring(
10,
12
)}-${card.substring(12, 14)}`;
sex = parseInt(card.substr(16, 1), 10) % 2 === 1 ? 'M' : 'F';
re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
const arrSplit = num.match(re);
const dtmBirth = new Date(
`${arrSplit[2]}/${arrSplit[3]}/${arrSplit[4]}`
);
dtmBirth.setDate(arrSplit[4]);
const bGoodDay =
dtmBirth.getFullYear() === Number(arrSplit[2]) &&
dtmBirth.getMonth() + 1 === Number(arrSplit[3]) &&
dtmBirth.getDate() === Number(arrSplit[4]);
if (!bGoodDay) {
return false;
}
const arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
const arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
let nTemp = 0;
let i;
for (i = 0; i < 17; i++) {
nTemp += num.substr(i, 1) * arrInt[i];
}
const valnum = arrCh[nTemp % 11];
if (valnum !== num.substr(17, 1)) {
return false;
}
}
console.log(birthday, sex);
if (sex == 'F') {
formModel.gender = '0';
} else {
formModel.gender = '1';
}
formModel.birth = birthday;
} else {
Message.warning(isCardID(formModel.id_card));
}
};