// 判断身份证号格式以及年龄 export function authenticationAccount(idNum) { const city = { 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: \'国外\', }; let tip = \'校验成功\'; let isRight = true; let sex = \'\'; let age = 0; let code = []; if (idNum.length !== 18) { tip = \'身份证号格式错误\'; isRight = false; } else if (!city[idNum.substr(0, 2)]) { tip = \'地址编码错误\'; isRight = false; } else { // 18位身份证需要验证最后一位校验位 code = idNum.split(\'\'); // ∑(ai×Wi)(mod 11) // 加权因子 const factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; // 校验位 const 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 = code[i]; wi = factor[i]; sum += ai * wi; } // var last = parity[sum % 11]; if (parity[sum % 11].toString() !== code[17].toString()) { tip = \'校验位错误\'; isRight = false; } if (isRight) { // 身份证号解析 const codeStr = idNum.toString(); if (parseInt(codeStr.substr(16, 1), 10) % 2 === 1) { sex = \'男\'; } else { sex = \'女\'; } // 获取年龄 const myDate = new Date(); const month = myDate.getMonth() + 1; const day = myDate.getDate(); age = myDate.getFullYear() - codeStr.substring(6, 10) - 1; const codeMonth = parseInt(codeStr.substring(10, 12), 10); const codeDay = parseInt(codeStr.substring(12, 14), 10); if (codeMonth < month || (codeMonth === month && codeDay <= day)) { age++; } } } return { isRight, age, sex, tip, }; }