/** * Created by PanJiaChen on 16/11/18. */ /** * @param {string} path * @returns {Boolean} */ export function isExternal(path) { return /^(https?:|mailto:|tel:)/.test(path) } /** * @param {string} str * @returns {Boolean} */ export function validUsername(str) { const valid_map = ['admin', 'editor'] return valid_map.indexOf(str.trim()) >= 0 } export function validMail(str) { return /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(str) } export function validPhone(str) { return /^1[0-9]{10}$/.test(str) } export function validId(idStr) { const sId = String(idStr) if (!/(^\d{15}$)|(^\d{17}(\d|X|x)$)/.test(sId)) { return false } // 身份证省编码 const provinceCode = { 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 (!provinceCode[sId.substring(0, 2)]) { return false } // 出生日期验证 const yearStr = sId.substring(6, 10) const monthStr = sId.substring(10, 12) const dayStr = sId.substring(12, 14) const dateObj = new Date(yearStr, monthStr - 1, dayStr) const inputDateStr = `${yearStr}-${monthStr}-${dayStr}` const calcuMonth = (dateObj.getMonth() + 1) >= 10 ? (dateObj.getMonth() + 1) : `0${dateObj.getMonth() + 1}` const calcuDate = dateObj.getDate() >= 10 ? dateObj.getDate() : `0${dateObj.getDate()}` const calcuDateStr = `${dateObj.getFullYear()}-${calcuMonth}-${calcuDate}` if (inputDateStr !== calcuDateStr) { return false } // 校验码校验 let sum = 0 const weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] const codes = '10X98765432' for (let i = 0; i < sId.length - 1; i++) { sum += sId[i] * weights[i] } const last = codes[sum % 11] // 计算出来的最后一位身份证号码 if (sId[sId.length - 1] !== last) { return false } return true }