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
135
136
137
138
139
//获取url参数
export function getQueryVariable(variable, urlInfo) {
let url = decodeURI(decodeURI(urlInfo || window.location.href))
console.log(url)
let i = url.indexOf('?')
let queryStr = url.substr(i + 1)
let vars = queryStr.split("&");
for (let i = 0; i < vars.length; i++) {
let pair = vars[i].split("=");
if (pair[0] == variable) {
return pair[1];
}
}
return '';
}
// 判断ios还是安卓
export function isIOSWebKit() {
const aa = window.navigator.userAgent;
if (!!aa.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)) {// ios端
return true;
} else if (aa.indexOf('Android') !== -1 || aa.indexOf('Adr') !== -1) {// 安卓端
return false;
}
}
//当前方法传参数两种 字符串或者map
export function callMobile(handlerInterface, parameters) {
let classStr = Object.prototype.toString.call(parameters);
if (classStr === '[object String]' || classStr === '[object Object]') {
let param = parameters;
if (classStr === "[object Object]") { //判断传参是str ,还是object
//handlerInterface由iOS addScriptMessageHandler与andorid addJavascriptInterface 代码注入而来。
param = JSON.stringify(parameters);//参数必须转化成json格式
}
try {
if (isIOSWebKit()) {//ios
if (window.webkit !== undefined) {
if (param == '{}') {
window.webkit.messageHandlers[handlerInterface].postMessage(null);
} else {
window.webkit.messageHandlers[handlerInterface].postMessage(param);
}
}
} else if (isIOSWebKit() === false) {
//安卓传输不了js json对象,只能传输string
if (param == '{}') {
window.H5page[handlerInterface]();
} else {
window.H5page[handlerInterface](param);
}
}
} catch (e) {
}
}
}
// 验证身份证号 带校验位
export const validateIdCard = (idCard) => {
let flag = false;
// 15位和18位身份证号码的正则表达式
const regIdCard = /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/;
// 如果通过该验证,说明身份证格式正确,但准确性还需计算
if (regIdCard.test(idCard)) {
if (idCard.length === 18) {
const idCardWi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; // 将前17位加权因子保存在数组里
const idCardY = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]; // 这是除以11后,可能产生的11位余数、验证码,也保存成数组
let idCardWiSum = 0; // 用来保存前17位各自乖以加权因子后的总和
for (let i = 0; i < 17; i++) {
idCardWiSum += idCard.substring(i, i + 1) * idCardWi[i];
}
const idCardMod = idCardWiSum % 11; // 计算出校验码所在数组的位置
const idCardLast = idCard.substring(17); // 得到最后一位身份证号码
// 如果等于2,则说明校验码是10,身份证号码最后一位应该是X
if (idCardMod === 2) {
flag = idCardLast === 'X' || idCardLast === 'x';
} else {
// 用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码
flag = idCardLast === ToString(idCardY[idCardMod]);
}
}
} else {
flag = false;
}
return flag;
};
/**
* 身份证带校验位验证
* @param type 0 不限男女 1 男 2 女
*/
// 身份证正则
export const idCardReg = /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)/;
// 男性身份证正则
export const menIdCardReg = /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}[1|3|5|7|9][0-9Xx]$)/;
// 女性身份证正则
export const womenIdCardReg = /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}[0|2|4|6|8][0-9Xx]$)/;
export const idCardValidator = (value) => {
const reg = [idCardReg, menIdCardReg, womenIdCardReg][0];
if (value) {
const val = value.trim();
const flag = validateIdCard(value);
if ((!flag || !reg.test(value)) && val) {
return new Promise(resolve => {
resolve(false)
})
}
}
new Promise(resolve => {
resolve(true)
})
};
//身份证方法校验
export const idCardV = (value, type = 0) => {
const reg = [idCardReg, menIdCardReg, womenIdCardReg][type];
if (value) {
const val = value.trim();
const flag = validateIdCard(value);
if ((!flag || !reg.test(value)) && val) {
return false
}
}
return true
}
// 转换字符串
export const ToString = str => {
if (str === 0) {
return "0";
}
str = str || "";
return str.toString();
};