let num = /^[0-9]*$/ let mobile = /^1[3|4|5|7|8|9][0-9]\d{8}$/ let email = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/ export default { isNumber(str) { return num.test(str) }, isNumber2(str) { return typeof str === 'number' }, isMobile(str) { return mobile.test(str) }, isEmail(str) { return email.test(str) }, idTransfer(sId) { if (sId.length === 15) { let arrInt = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2], arrCh = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'], nTemp = 0 sId = sId.substr(0, 6) + '19' + sId.substr(6, sId.length - 6) for (let i = 0; i < 17; i++) { nTemp += Number(sId.substr(i, 1)) * arrInt[i] } sId += arrCh[nTemp % 11] } return sId }, // 是否是身份证 isIdCard(s) { let sId = this.idTransfer(s), aCity = { 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 (!/^\d{17}(\d|x)$/i.test(sId)) { return [false, '身份证格式错误'] } // sId = sId.replace(/x$/i, "a"); if (!aCity[parseInt(sId.substr(0, 2), 10)]) { return [false, '身份证前两位错误'] } var sBirthday = sId.substr(6, 4) + '-' + Number(sId.substr(10, 2)) + '-' + Number(sId.substr(12, 2)), d = new Date(sBirthday.replace(/-/g, '/')) if (sBirthday !== d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate()) { return [false, '非法身份证号'] } var sMouth = d.getMonth() + 1, sDate = d.getDate() sBirthday = d.getFullYear() + '-' + (sMouth > 9 ? sMouth : '0' + sMouth) + '-' + (sDate > 9 ? sDate : '0' + sDate) /* 十八位身份证的校验码 */ // for (let i = 17; i >= 0; i--) { // iSum += (Math.pow(2, i) % 11) * parseInt(sId.charAt(17 - i), 11); // if ( iSum % 11 !== 1 ) { // return [false,'非法身份证号']; // } // } if (sId.length == 18) { // ∑(ai×Wi)(mod 11) // 加权因子 let factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] // 校验位 let parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2] let sum = 0 let ai = 0 let wi = 0 for (let i = 0; i < 17; i++) { ai = Number(sId[i]) wi = factor[i] sum += ai * wi } let last = parity[sum % 11] if (last != sId[17].toUpperCase()) { return [false, '非法身份证号'] } } return [true, sBirthday, Number(sId.substr(16, 1)) % 2 ? 'MALE' : 'FEMALE'] } }