根据身份证号来计算年龄与性别 JavaScript && Vue.js

15 篇文章 0 订阅
10 篇文章 1 订阅


今天我要来写一些笨重的代码(以后肯定会写出简洁的别人都不懂的代码!!!)

计算规则

据我所了解(可能了解的不是很准确,大家自行网上搜索一下),我国身份证的规则如下:

身份证位数出生年份出生月份出生日期性别
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 = "";
		}
	}

啊!不想写了,自己看吧。。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值