UNPKG

5.14 kBJavaScriptView Raw
1/**
2 * Created by wujw on 18/08/14.
3 */
4/* eslint-disable*/
5const mobileRex = /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$/; // 手机号
6const codeRex = /^\d{6}$/; // 验证码
7const cnReg = /^([\u4e00-\u9fa5\·]{2,6})$/; //中文名正则
8const regEmail = /^([a-zA-Z0-9]+[_|\-|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\-|\.]?)*[a-zA-Z0-9]+(\.[a-zA-Z]{2,3})+$/; //邮箱
9const 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])$)$/; //15位和18位身份证号码的正则表达式
10const usernameRex = /^[a-zA-Z][\da-zA-Z]{2,19}$/;
11/**
12 * 校验用户名 字母开头,3-20位
13 * @param {*} str
14 */
15const checkUserName = (str) => {
16 return usernameRex.test(str);
17}
18/**
19 * 校验手机号格式
20 * @param {*} str
21 */
22const checkMobile =(str) =>{
23 return mobileRex.test(str);
24}
25/**
26 * 校验验证码位数
27 * @param {*} str
28 */
29const checkCode = (str) => {
30 return codeRex.test(str);
31}
32/**
33 * 校验是否是中文名
34 * @param {*} str
35 */
36const checkCN = (str) => {
37 return cnReg.test(str);
38}
39/**
40 * 密码校验大小写+数字
41 * @param {*} str
42 */
43const checkPWD = (str) => {
44 let rule1 = /\d+/;
45 let rule2 = /[a-z]+/;
46 let rule3 = /[A-Z]+/;
47 let rule4 = /[~!@#\$%^&*\{\};,.\?\/'"]/;
48 let rule5 = /^.{6,20}$/;
49 let flag1 = rule1.test(str);
50 let flag2 = rule2.test(str);
51 let flag3 = rule3.test(str);
52 let flag4 = rule4.test(str);
53 let flag5 = rule5.test(str);
54 if (flag1 && flag5 && (flag2 || flag3)) {
55 return true;
56 } else {
57 return false;
58 }
59}
60/**
61 * 金钱格式化
62 * @param {*} money
63 */
64const formatCash = (money) => {
65 // 方法一
66 return money.replace(/\B(?=(\d{3})+(?!\d))/g, ',')
67 // 方法二
68 // return money.split('').reverse().reduce((prev, next, index) => {
69 // return ((index % 3) ? next : (next + ',')) + prev
70 // })
71}
72
73/*
74 * 身份证15位编码规则:dddddd yymmdd xx p
75 * dddddd:6位地区编码
76 * yymmdd: 出生年(两位年)月日,如:910215
77 * xx: 顺序编码,系统产生,无法确定
78 * p: 性别,奇数为男,偶数为女
79 *
80 * 身份证18位编码规则:dddddd yyyymmdd xxx y
81 * dddddd:6位地区编码
82 * yyyymmdd: 出生年(四位年)月日,如:19910215
83 * xxx:顺序编码,系统产生,无法确定,奇数为男,偶数为女
84 * y: 校验码,该位数值可通过前17位计算获得
85 *
86 * 前17位号码加权因子为 Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ]
87 * 验证位 Y = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]
88 * 如果验证码恰好是10,为了保证身份证是十八位,那么第十八位将用X来代替
89 * 校验位计算公式:Y_P = mod( ∑(Ai×Wi),11 )
90 * i为身份证号码1...17 位; Y_P为校验码Y所在校验码数组位置
91 */
92const validateIdCard = (idCard) => {
93 let isOK = false;
94 //如果通过该验证,说明身份证格式正确,但准确性还需计算
95 if (regIdCard.test(idCard)) {
96 if (idCard.length == 18) {
97 var idCardWi = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); //将前17位加权因子保存在数组里
98 var idCardY = new Array(1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2); //这是除以11后,可能产生的11位余数、验证码,也保存成数组
99 var idCardWiSum = 0; //用来保存前17位各自乖以加权因子后的总和
100 for (var i = 0; i < 17; i++) {
101 idCardWiSum += idCard.substring(i, i + 1) * idCardWi[i];
102 }
103
104 var idCardMod = idCardWiSum % 11; //计算出校验码所在数组的位置
105 var idCardLast = idCard.substring(17); //得到最后一位身份证号码
106
107 //如果等于2,则说明校验码是10,身份证号码最后一位应该是X
108 if (idCardMod == 2) {
109 if (idCardLast == "X" || idCardLast == "x") {
110 isOK = true;
111 } else {
112 }
113 } else {
114 //用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码
115 if (idCardLast == idCardY[idCardMod]) {
116 isOK = true;
117 } else {
118 }
119 }
120 } else {
121 isOK = true
122 }
123 }
124 return isOK;
125}
126
127/**
128 * 通过身份证获取东西
129 * @param {*} UUserCard
130 * @param {*} type :birth,age,sex
131 */
132const getIdCardInfo = (UUserCard, type) => {
133 if (type == 'birth') {
134 //获取出生日期
135 birth = UUserCard.substring(6, 10) + "-" + UUserCard.substring(10, 12) + "-" + UUserCard.substring(12, 14);
136 return birth;
137 }
138 if (type == 'sex') {
139 //获取性别
140 if (parseInt(UUserCard.substr(16, 1)) % 2 == 1) {
141 //男
142 return "男";
143 } else {
144 //女
145 return "女";
146 }
147 }
148 if (type == 'age') {
149 //获取年龄
150 var myDate = new Date();
151 var month = myDate.getMonth() + 1;
152 var day = myDate.getDate();
153 var age = myDate.getFullYear() - UUserCard.substring(6, 10) - 1;
154 if (UUserCard.substring(10, 12) < month || UUserCard.substring(10, 12) == month && UUserCard.substring(12, 14) <= day) {
155 age++;
156 }
157 return age;
158 }
159}
160module.exports = {
161 checkIdCard: validateIdCard,
162 checkCN: checkCN
163}