UNPKG

real-name-pc

Version:
124 lines (102 loc) 2.83 kB
import provinceMap from './province-map'; class Rules { constructor() { } static get Instance() { if(!this._instance) { this._instance = new Rules(); } return this._instance; } /** * 检查姓名,2至30个汉字 * @param {*} name 姓名 */ checkName(name) { return /^[\u4e00-\u9fa5]{2,30}$/.test(name); }; /** * 检查身份证非空 * @param {*} numOfCard 身份证号 */ checkCardNull(numOfCard) { return !!numOfCard; }; /** * 检查身份证位数 * @param {*} numOfCard 身份证号 */ checkCardLength(numOfCard) { const regExp = new RegExp(/(^\d{15}$)|(^\d{17}(\d|x|X)$)/i); return regExp.test(numOfCard); } /** * 检票身份证的省 * @param {*} numOfCard 身份证号 */ checkCardProvince(numOfCard) { const province = parseInt(numOfCard.substring(0, 2)); return !!provinceMap[province]; }; /** * 验证出生日期 * @param {*} numOfCard 身份证号 */ checkCardBirthday(numOfCard) { const date = new Date(); const currentYear = date.getFullYear(); const year = numOfCard.substring(6,10); const month = numOfCard.substring(10,12); const day = numOfCard.substring(12,14); const dayError = day < 0 || day > 31; const monthError = month < 0 || month > 12; const yearError = (currentYear-year) < 3 || (currentYear-year) > 120; if (dayError || monthError || yearError) { return false; } return true; }; /** * 验证是否满18岁 * @param {*} numOfCard 身份证号 */ checkCardAdult(numOfCard) { const year = Number(numOfCard.substring(6,10)); const month = Number(numOfCard.substring(10,12)); const day = Number(numOfCard.substring(12,14)); const date = new Date(); const currentYear = date.getFullYear(); const currentMonth = date.getMonth() + 1; const currentDay = date.getDate(); if (currentYear - year < 18) { return false; } else if (currentYear - year === 18 && currentMonth < month) { return false; } else if (currentYear - year === 18 && currentMonth === month && currentDay < day) { return false; } return true; }; /** * 验证身份证模式 * @param {*} numOfCard 身份证号 */ checkCardParity(numOfCard) { if (numOfCard.length === 15) { return true; } const keys = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; const vals = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; let i = 0; let last = 0; for(i = 0; i < 17; i++){ last += numOfCard.substr(i,1) * keys[i]; } const lastchar = vals[last%11]; if(lastchar == numOfCard.substr(numOfCard.length-1, 1)) { return true; } return false }; } export default Rules.Instance;