Files
ebiz-h5/src/assets/js/utils/idNoCheck.js

181 lines
4.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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