身份证校验
const RegexUtils = {
/**
* 中文验证
*/
checkCN(text: string): boolean {
if (text) {
let regex = /^[\u4E00-\u9FA5]+$/;
return regex.test(text.trim());
} else {
return false;
}
},
/**
* 手机号码格式验证
*/
checkMobile(mobile: string): boolean {
if (mobile) {
let regex = /^1[3-9]\d{9}$/;
return regex.test(mobile.trim());
} else {
return false;
}
},
/**
* 邮箱格式验证
*/
checkEmail(email: string): boolean {
let result: boolean;
if (email) {
let regex =
/^([a-zA-Z0-9]+[_|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
result = regex.test(email.trim());
} else {
result = false;
}
return result;
},
/**
* 字母+数字
*/
checkLetterAndNumber(value: string) {
if (value) {
let regex = /^[a-zA-Z0-9]+$/;
return regex.test(value.trim());
} else {
return false;
}
},
checkBank(value: string) {
if (value) {
let regex = /^[0-9]+$/;
return regex.test(value.trim());
} else {
return false;
}
},
isLeapYear(year: number): boolean {
if (isNaN(year)) {
// 非数字
return false;
} else {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
},
/**
* 身份证号码格式验证
*/
checkIdCard(idCardNum: string): boolean {
let prov = {
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: '国外',
};
if (!prov[parseInt(idCardNum.substr(0, 2))]) {
// 省份检验
return false;
}
let regExp;
let idChars = idCardNum.split('');
switch (idCardNum.length) {
case 15: // 15位身份证号检测
if (this.isLeapYear(parseInt(idCardNum.substr(6, 2)) + 1900)) {
// 闰年
regExp =
/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;
} else {
// 平年
regExp =
/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;
}
return regExp.test(idCardNum);
case 18: // 18位身份号码检测
if (this.isLeapYear(parseInt(idCardNum.substr(6, 4)))) {
// 闰年
regExp =
/^[1-9][0-9]{5}[1-9][0-9]{3}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;
} else {
// 平年
regExp =
/^[1-9][0-9]{5}[1-9][0-9]{3}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;
}
if (regExp.test(idCardNum)) {
// 基本校验
let modulus,
checkCodeList = '10X98765432';
let sum, code;
sum =
(parseInt(idChars[0]) + parseInt(idChars[10])) * 7 +
(parseInt(idChars[1]) + parseInt(idChars[11])) * 9 +
(parseInt(idChars[2]) + parseInt(idChars[12])) * 10 +
(parseInt(idChars[3]) + parseInt(idChars[13])) * 5 +
(parseInt(idChars[4]) + parseInt(idChars[14])) * 8 +
(parseInt(idChars[5]) + parseInt(idChars[15])) * 4 +
(parseInt(idChars[6]) + parseInt(idChars[16])) * 2 +
parseInt(idChars[7]) +
parseInt(idChars[8]) * 6 +
parseInt(idChars[9]) * 3; // 计算校验位
modulus = sum % 11;
code = checkCodeList.substr(modulus, 1); // 找到校验位
return code == idChars[17];
} else {
return false;
}
default:
return false;
}
},
/**
* 金额格式验证:不能为负数,保留两位小数
*/
checkAmount(amount: string): boolean {
if (amount) {
const regex =
/(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0)$)|(^[0-9]\.[0-9]([0-9])?$)/;
return regex.test(amount.trim());
} else {
return false;
}
},
//校验数字加字母
checkNumberAndLetter(str: string): boolean {
const re = /^[0-9a-zA-Z]*$/; //判断字符串是否为数字和字母组合
if (!re.test(str)) {
return false;
} else {
return true;
}
},
// 一种类型的密码
oneTypePwdRegex:
/(?!^[0-9]{8,20}$)(?!^[a-z]{8,20}$)(?!^[A-Z]{8,20}$)^[0-9A-Za-z\!\@\#\$\%\^\&\*\(\)\_\-\+\=]{8,20}$/g,
// 两种类型的密码
twoTypePwdRegex:
/(?!^[0-9a-zA-Z]{8,20}$)^[0-9A-Za-z\!\@\#\$\%\^\&\*\(\)\_\-\+\=]{8,20}$/g,
};
export default RegexUtils;