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('');
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]}`;
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})*$`);