validate.ts
4.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/**
* @param {string} str
* @returns {Boolean}
* @description 验证邮箱格式
*/
export function validMail(str) {
const reg = /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/
return reg.test(str)
}
/**
* @param {string} str
* @returns {Boolean}
* @description 验证手机号格式
*/
export function validMobile(str) {
if (!str || str.length !== 11 || parseInt(str[0]) !== 1 || [1, 2, 0].includes(parseInt(str[1]))) {
return false
} else {
return true
}
}
/**
* @param {string} str
* @returns {Boolean}
* @description 验证密码格式:8-20位密码,可以包含大小写字母、数字、特殊字符
*/
export function validPwd(str) {
const characterReg = /[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘',。、a-z A-Z 0-9]/im
if (str && str.trim() && str.length >= 8 && str.length <= 20 && characterReg.test(str)) {
return true
} else {
return false
}
}
/**
* 固话校验
* @param {string} str
* @returns {Boolean}
*/
export function tphone(value) {
return /^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/.test(value)
}
/**
* 数字校验
* @param {string} str
* @returns {Boolean}
*/
export function price(value) {
return /^\d+.?\d{0,2}$/.test(value)
}
/**
* 身份证号简易校验
* @param {string} str
* @returns {Boolean}
*/
export function idcardEasy(value) {
return /(^\d{15}$)|(^\d{17}(\d|X)$)/.test(value)
}
/**
* 身份证号码校验
* @param {string} str
* @returns {Boolean}
*/
export function checkIdcard(personnumber) {
if (!personnumber) {
return false
}
personnumber = personnumber.toUpperCase()
// console.log(personnumber)
// 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。
if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(personnumber))) {
return false
}
// 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
// 下面分别分析出生日期和校验位
var len, re
len = personnumber.length
if (len == 15) {
re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/)
var arrSplit = personnumber.match(re)
// 检查生日日期是否正确
var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4])
var bGoodDay
bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]))
if (!bGoodDay) {
return false
} else {
// 将15位身份证转成18位
// 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
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 nTemp = 0; var i
personnumber = personnumber.substr(0, 6) + '19' + personnumber.substr(6, personnumber.length - 6)
for (i = 0; i < 17; i++) {
nTemp += personnumber.substr(i, 1) * arrInt[i]
}
personnumber += arrCh[nTemp % 11]
return true
}
}
if (len == 18) {
re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/)
var arrSplit = personnumber.match(re)
// 检查生日日期是否正确
var dtmBirth = new Date(arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4])
var bGoodDay
bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[3])) && (dtmBirth.getDate() == Number(arrSplit[4]))
if (!bGoodDay) {
return false
} else {
// 检验18位身份证的校验码是否正确。
// 校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
var valnum
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 nTemp = 0; var i
for (i = 0; i < 17; i++) {
nTemp += personnumber.substr(i, 1) * arrInt[i]
}
valnum = arrCh[nTemp % 11]
if (valnum != personnumber.substr(17, 1)) {
return false
}
return true
}
}
return false
}