JS検証身分証番号の真実性
5343 ワード
if(!this.testIdNO(this.form.idNO)) {
this.$toast(' ');
}
testIdNO(value) {
var vcity = {
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 isEmpty = function (card) {
if (/^\s*$/.test(card) === true) {
return true;
}
}
// , ,
let isCardNo = function (card) {
if (isEmpty(card)) {
return true;
}
//
// 15 18 ,15 ,18 17 , , X
var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/;
if (reg.test(card) === false) {
return false;
}
return true;
};
// ,
let checkProvince = function (card) {
if (isEmpty(card)) {
return true;
}
var province = card.substr(0, 2);
if (vcity[province] == undefined) {
return false;
}
return true;
};
//
let checkBirthday = function (card) {
if (isEmpty(card)) {
return true;
}
var len = card.length;
// 15 , (3 ) (3 ) (2 ) (2 ) (2 ) (3 ),
if (len == '15') {
var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
var arr_data = card.match(re_fifteen);
var year = arr_data[2];
var month = arr_data[3];
var day = arr_data[4];
var birthday = new Date('19' + year + '/' + month + '/' + day);
return verifyBirthday('19' + year, month, day, birthday);
}
// 18 , (3 ) (3 ) (4 ) (2 ) (2 ) (4 ), X
if (len == '18') {
var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
var arr_data = card.match(re_eighteen);
var year = arr_data[2];
var month = arr_data[3];
var day = arr_data[4];
var birthday = new Date(year + '/' + month + '/' + day);
return verifyBirthday(year, month, day, birthday);
}
return false;
};
//
let verifyBirthday = function (year, month, day, birthday) {
var now = new Date();
var now_year = now.getFullYear();
//
if (birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day) {
// (3 100 )
var time = now_year - year;
if (time >= 3 && time <= 100) {
return true;
}
return false;
}
return false;
};
//
let checkParity = function (card) {
if (isEmpty(card)) {
return true;
}
//15 18
card = changeFivteenToEighteen(card);
var len = card.length;
if (len == '18') {
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var cardTemp = 0, i, valnum;
for (i = 0; i < 17; i++) {
cardTemp += card.substr(i, 1) * arrInt[i];
}
valnum = arrCh[cardTemp % 11];
if (valnum == card.substr(17, 1)) {
return true;
}
return false;
}
return false;
};
//15 18
let changeFivteenToEighteen = function (card) {
if (isEmpty(card)) {
return true;
}
if (card.length == '15') {
var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
var cardTemp = 0, i;
card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);
for (i = 0; i < 17; i++) {
cardTemp += card.substr(i, 1) * arrInt[i];
}
card += arrCh[cardTemp % 11];
return card;
}
return card;
};
//checkCard = function () {
var card = value;
// ,
if (isCardNo(card) === false) {
//alert(' , ');
//document.getElementById('card_no').focus;
return false;
}
//
if (checkProvince(card) === false) {
return false;
}
//
if (checkBirthday(card) === false) {
return false;
}
//
if (checkParity(card) === false) {
return false;
}
return true;
}
https://www.cnblogs.com/zpblogs/p/11239597.html#/cnblog/works/article/11239597