mirror of
http://112.124.100.131/GFRS/ebiz-h5.git
synced 2025-12-10 17:26:44 +08:00
181 lines
4.4 KiB
JavaScript
181 lines
4.4 KiB
JavaScript
import changeFifteenToEighteen from './changeFifteenToEighteen'
|
||
|
||
const idNoCheck = {
|
||
//是否以9开头
|
||
startWithNine: function(card) {
|
||
if (card.substr(0, 1) === '9') {
|
||
return true
|
||
}
|
||
return false
|
||
},
|
||
|
||
isCardNoBirth: function(card) {
|
||
//出生证证件号由数字字母组合
|
||
var reg = /(^[a-zA-Z0-9]{5,17}$)/
|
||
return reg.test(card)
|
||
},
|
||
|
||
isCardNo: function(card) {
|
||
//身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
|
||
var reg = /(^\d{17}(\d|X)$)/
|
||
var reg2 = /(^\d{15}$)/
|
||
if (!reg.test(card) && !reg2.test(card)) {
|
||
return false
|
||
}
|
||
return true
|
||
},
|
||
|
||
//取身份证前两位,校验省份
|
||
checkProvince: function(card) {
|
||
var province = card.substr(0, 2)
|
||
if (vcity[province] == undefined) {
|
||
return false
|
||
}
|
||
return true
|
||
},
|
||
|
||
//检查生日是否正确
|
||
checkBirthday: function(card) {
|
||
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 this.verifyBirthday('19' + year, month, day, birthday)
|
||
}
|
||
//身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X
|
||
if (len == '18') {
|
||
let re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/
|
||
let arr_data = card.match(re_eighteen)
|
||
let year = arr_data[2]
|
||
let month = arr_data[3]
|
||
let day = arr_data[4]
|
||
let birthday = new Date(year + '/' + month + '/' + day)
|
||
return this.verifyBirthday(year, month, day, birthday)
|
||
}
|
||
return false
|
||
},
|
||
|
||
//校验日期
|
||
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) {
|
||
//判断年份的范围(0岁到100岁之间)
|
||
//var time = now_year - year;
|
||
if (year < 1900) {
|
||
return false
|
||
}
|
||
if (now.getTime() - birthday.getTime() < 0) {
|
||
return false
|
||
}
|
||
// if (time >= 0 && time <= 100) {
|
||
// return true;
|
||
// }
|
||
return true
|
||
}
|
||
return false
|
||
},
|
||
|
||
//校验位的检测
|
||
checkParity: function(card) {
|
||
//15位转18位
|
||
if (card.length == '15') {
|
||
card = changeFifteenToEighteen(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
|
||
},
|
||
|
||
/**
|
||
* 身份证校验
|
||
*
|
||
*/
|
||
isIdno: function(idNo) {
|
||
//是否为空
|
||
if (idNo === '') {
|
||
return false
|
||
}
|
||
//校验长度,类型
|
||
if (this.isCardNo(idNo) === false) {
|
||
return false
|
||
}
|
||
if (this.startWithNine(idNo) === true) {
|
||
return false
|
||
}
|
||
//检查省份 --
|
||
// if (this.checkProvince(idNo) === false) {
|
||
// return false;
|
||
// }
|
||
//校验生日
|
||
if (this.checkBirthday(idNo) === false) {
|
||
return false
|
||
}
|
||
//检验位的检测
|
||
if (this.checkParity(idNo) === false) {
|
||
return false
|
||
}
|
||
return true
|
||
}
|
||
}
|
||
|
||
const 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: '国外'
|
||
}
|
||
|
||
export default idNoCheck
|