200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 【通用方法】身份证号校验 获取年龄性别生日(兼容一代二代身份证)

【通用方法】身份证号校验 获取年龄性别生日(兼容一代二代身份证)

时间:2020-12-29 05:42:25

相关推荐

【通用方法】身份证号校验 获取年龄性别生日(兼容一代二代身份证)

二代身份证正则表达式

/^(([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2]))\d{4}(([1][9]\d{2})|([2]\d{3}))(([0][1-9])|([1][0-2]))(([0][1-9])|([1-2][0-9])|([3][0-1]))\d{3}[0-9xX]$/

这段正则表达式用于校验中国二代身份证号码的格式是否正确。其中,身份证号码由18位字符组成,前17位为数字,最后一位可能是数字或字母X。

正则表达式解释如下:

^表示匹配字符串的开始位置;

([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2])表示匹配第1-2位的数字,代表所在省份的代码;

\d{4}表示匹配第3-6位的数字,代表所在城市的代码;

(([1][9]\d{2})|([2]\d{3}))表示匹配第7-10位的数字,代表出生年份;

(([0][1-9])|([1][0-2]))表示匹配第11-12位的数字,代表出生月份;

(([0][1-9])|([1-2][0-9])|([3][0-1]))表示匹配第13-14位的数字,代表出生日期;

\d{3}表示匹配第15-17位的数字,代表所在地区的代码;

[0-9xX]表示匹配第18位的数字或字母X,代表校验位;

$表示匹配字符串的结束位置。

一代身份证正则表达式

/^(([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2]))\d{4}(\d{2})(0[1-9]|1[0-2])([0-2][1-9]|10|20|30|31])\d{3}$/

这段正则表达式用于校验中国一代身份证号码的格式是否正确。第一代身份证号码是由15位数字组成,前6位是地址码,接下来两位是年份的后两位,再接下来两位是月份,最后两位是日。

正则表达式解释如下:

与二代身份证基本上相同。区别在于:第一代身份证在前 6 位号码后没有完整出生年份,而二代的有完整的出生年份。并且第二代身份证没有最后一位的数字校验码

封装的函数(可直接调用)

传入参数 idcardTest:身份证号

得到结果:得到person对象(包含年龄、性别、生日)。若校验失败打印输入的身份证号长度不对,或者号码不符合规定!

具体代码如下所示:

function idCardToAgeAndSex(idcardTest) {// 一代身份证正则表达式let idcardTest1 = /^(([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2]))\d{4}(\d{2})(0[1-9]|1[0-2])([0-2][1-9]|10|20|30|31])\d{3}$/// 二代身份证正则表达式let idcardTest2 = /^(([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2]))\d{4}(([1][9]\d{2})|([2]\d{3}))(([0][1-9])|([1][0-2]))(([0][1-9])|([1-2][0-9])|([3][0-1]))\d{3}[0-9xX]$/;// 获取当前时间let nowYear = new Date().getFullYear(); //获取当前年份let nowMonth = new Date().getMonth(); //获取当前月份let person = {//最终信息保存于此age:'',sex:'',birthday:''}let idYear = 0 //获取身份证年份let idMonth = '' //获取身份证月份let idDate = '' //获取身份证日份let sexCheck = '' //获取身份证性别//身份证校验if (idcardTest1.test(idcardTest)) {idYear = Number(idcardTest.slice(6, 8)) + Number(1900) //身份证年份idMonth = idcardTest.slice(8, 10) //身份证月份idDate = idcardTest.slice(10, 12) //身份证日份sexCheck = idcardTest.slice(14, 15) //身份证性别} else if (idcardTest2.test(idcardTest)) {idYear = idcardTest.slice(6, 10) //身份证年份idMonth = idcardTest.slice(10, 12) //身份证月份idDate = idcardTest.slice(12, 14) //身份证日份sexCheck = idcardTest.slice(16, 17) //身份证性别} else {//不满足条件则清空年龄与性别person.sex = ""person.age = ""person.birthday = ""console.log('person:',person)console.log('输入的身份证号长度不对,或者号码不符合规定!')return}// 年龄计算if (nowMonth - idMonth >= 0) {person.age = String(nowYear - idYear);} else {person.age = String(nowYear - idYear - 1);}// 生日拼接person.birthday = idYear + '-' + idMonth + '-' + idDate// 性别判断if (sexCheck % 2 == 0) {person.sex = "女";} else {person.sex = "男";}console.log('person:',person)}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。