123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- 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: '国外'
- };
- const regCity = `(${Reflect.ownKeys(city).join('|')})`;
- //当前日期
- const currentDate = new Date();
- const year = String(currentDate.getFullYear()).split('');
- const month = String(currentDate.getMonth() + 1).split('');
- const day = String(currentDate.getDate()).split('');
- //处理小于10的月份和天数
- if (month.length < 2) {
- month.unshift('0');
- }
- if (day.length < 2) {
- day.unshift('0');
- }
- //校验时间月、日
- const regDay = `(((0[13578]|1[02])([0-2]\\d|3[0-1]))|(02[0-2]\\d)|((0[469]|11)([0-2]\\d|30)))`;
- //校验十五位身份证号
- const reg15 = `(${regCity}\\d{4}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{2})`;
- //当前月校验
- const currentYearMonth = `${month[0]}${month[1]}${day[0]==0? `0[1-${day[1]}]`:`([0-${day[0]-1}][1-9])|(${day[0]}[0-${day[1]}])`}`;
- /***当前年其他月份校验*/
- //当前月小于十月份校验
- const min10Month = `0[1-${month[1] - 1}](0[1-9]|[1-2]\\d|3[0-1])`;
- //当前月大于等于十月份校验
- const max10Month = `(0[1-9](0[1-9]|[1-2]\\d|3[0-1]))${month[1]==0? '':`|(1[0-${month[1] - 1}](0[1-9]|[1-2]\\d|3[0-1]))`}`;
- const currentYearOtherMonth = month[0] == 0? min10Month:max10Month;
- /***组装身份证号校验规则*/
- //当前年
- const currentYear = `${year[0]}${year[1]}${year[2]}${year[3]}`;
- //当前年份校验,当前月份是一月份只使用 currentYearMonth 校验月份
- const currentYearReg = `(${currentYear}${ month[0] == 0 && month[1] == 1? '(':`(${currentYearOtherMonth}|`}${currentYearMonth}))`;
- //其他年份校验
- const regMillenniumMinBirthday = `${year[0]}[0-${year[1]}](([0-${year[2] - 1<0? 0:year[2] - 1}]\\d)|(${year[2]}[0-${year[3] - 1 < 0? 0:year[3] - 1}]))`;
- const otherYearReg = `((([0-${year[0] - 1}]\\d{3})|(${regMillenniumMinBirthday}))${regDay})`;
- const regBirthday18 = `(${otherYearReg}|${currentYearReg})`;
- const reg18 = `(${regCity}\\d{4}${regBirthday18}\\d{3}[0-9Xx])`;
- const reg = new RegExp(`^(${reg15}|${reg18})*$`);
- const fn = (idCardNum) => {
- if (!idCardNum) return false
- return reg.test(idCardNum)
- }
- export default fn
|