今天我要来写一些笨重的代码(以后肯定会写出简洁的别人都不懂的代码!!!)
计算规则
据我所了解(可能了解的不是很准确,大家自行网上搜索一下),我国身份证的规则如下:
身份证位数 | 出生年份 | 出生月份 | 出生日期 | 性别 |
---|---|---|---|---|
15位(一代) | 7、8位 | 9、10位 | 11、12位 | 15位 奇男偶女 |
18位(二代) | 7、8、9、10位 | 11、12位 | 13、14位 | 17位 奇男偶女 |
需求
在用户输入身份证号之后,年龄与性别自动回填到相应的iput框中。
(其中年龄精确到月份[自作主张])
环境
vue + elementui
代码
代码中涉及到的一些组件我会说明,只看关键代码就可。其中有一些字符串转换是因为有后台数据要求。
this.PKform.sfzhm 身份证号
this.PKform.age 年龄
this.PKform.xbdm性别代码 1代表男,0代表女,暂时不涉及其他类型性别
this.PKform.xbmc性别名称 男 或 女
this.jsonData.xfrsfzhJson.val 组件中的身份证号
以上等等皆为data容器,不明了可忽略。
//相当长而且比较复杂的身份证校验规则(亲测有用)
let idcodeTest = /^(([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]$/;
//代码在@input方法中执行
if(idcodeTest.test(this.jsonData.xfrsfzhJson.val)){//先进行校验,test括号里可忽略,以下全部简称“自有代码”
//将获取到的证件号码转换一下以便得到长度判断是一代还是二代
let idcode = this.PKform.sfzhm + "";//累赘代码
let newidcode = idcode.split("").map(Number);//累赘代码
//其实直接取this.PKform.sfzhm的length就行
if(newidcode.length == 15){//15位身份证号
// 年龄计算
let nowYear = new Date().getFullYear();//获取当前年份
let nowMonth = new Date().getMonth();//获取当前月份
let idYear = Number(this.PKform.sfzhm.slice(6,8))+Number(1900);//获取身份证年份
let idMonth = this.PKform.sfzhm.slice(8,9);//获取身份证月份
if(nowMonth - idMonth >= 0){
this.jsonData.nlJson.val = nowYear-idYear;//等号左边为自有代码,是承接容器,可忽略
this.PKform.age = String(nowYear-idYear);//等号左边为自有代码,是承接容器,可忽略
}else{
this.jsonData.nlJson.val = String(nowYear-idYear-1);//等号左边为自有代码,是承接容器,可忽略
this.PKform.age = String(nowYear-idYear-1);//等号左边为自有代码,是承接容器,可忽略
}
//性别判断
let sexCheck = this.PKform.sfzhm.slice(14,15);
if(sexCheck%2 == 0){
this.PKform.xbdm = "0";
this.PKform.xbmc = "女";
this.jsonData.xfrxbJson.val = "0";
}else{
this.PKform.xbdm = "1";
this.PKform.xbmc = "男";
this.jsonData.xfrxbJson.val = "1";
}
}else if(newidcode.length == 18){//18位身份证号
// 年龄计算
let nowYear = new Date().getFullYear();//获取当前年份
let nowMonth = new Date().getMonth();//获取当前月份
let idYear = this.PKform.sfzhm.slice(6,10);//获取身份证年份
let idMonth = this.PKform.sfzhm.slice(10,11);//获取身份证月份
if(nowMonth - idMonth >= 0){
this.jsonData.nlJson.val = nowYear-idYear;
this.PKform.age = String(nowYear-idYear);
}else{
this.jsonData.nlJson.val = String(nowYear-idYear-1);
this.PKform.age = String(nowYear-idYear-1);
}
//性别判断
let sexCheck = this.PKform.sfzhm.slice(16,17);
if(sexCheck%2 == 0){
this.PKform.xbdm = "0";
this.PKform.xbmc = "女";
this.jsonData.xfrxbJson.val = "0";
}else{
this.PKform.xbdm = "1";
this.PKform.xbmc = "男";
this.jsonData.xfrxbJson.val = "1";
}
}else{//不满足条件则清空年龄与性别
this.PKform.xbdm = "";
this.PKform.xbmc = "";
this.jsonData.xfrxbJson.val = "";
this.jsonData.nlJson.val = "";
this.PKform.age = "";
}
}
啊!不想写了,自己看吧。。。