前言
身份证号并非 “无规则” 数字,每一段都代表着持证公民的一些信息。
当程序拿到用户身份证号后,可 “帮助” 用户算出年龄、性别、出生日期、地区等信息,
计算规则
现在大部分都是二代身份证(依文章发布日期),如果程序严谨的话,通过位数做一二代身份证判断分支,最后分别进行处理。
身份证位数 | 出生年份 | 出生月份 | 出生日期 | 性别 |
---|---|---|---|---|
15位(一代) | 7、8位 | 9、10位 | 11、12位 | 15位 奇男偶女 |
18位(二代) | 7、8、9、10位 | 11、12位 | 13、14位 | 17位 奇男偶女 |
函数封装
直接全部复制即可,
Vue
项目的话,做一下函数写法改造即可。
为此封装了一个函数(方便调用),做了身份证号是否合法验证,如下代码所示:
/**
* 通过身份证号获取年龄、性别
* @description 验证参数合法性,获取信息并返回
* @param {String} icard - 二代居民身份证号码
* @return Object
*/
function getIcard(icard) {
// 验证是否纯数字(直接退出函数并返回false)
if(!(/^\d+$/.test(icard))){ return false }
// 验证是否二代居民身份证(直接退出函数并返回false)
if(icard.length != 18) { return false }
// 要返回的最终信息(如果都为null则未获取到)
const result = {
gender: null,//性别
age: null//年龄
}
// 收集必要信息
icard.substring(6,10) + "-" +
icard.substring(10,12) + "-" +
icard.substring(12,14);
// 获取性别
if(parseInt(icard.substr(16,1)) %2 == 1) {
// 男性
result.gender = '男'
} else {
// 女性
result.gender = '女'
}
// 获取年龄
var myDate = new Date()
var month = myDate.getMonth() + 1
var day = myDate.getDate()
var age = myDate.getFullYear() - icard.substring(6, 10) - 1
if(icard.substring(10,12) < month || icard.substring(10,12) ==
month && icard.substring(12,14) <= day){ age ++; }
//年龄
result.age = age
// return
return result;
},
使用方法
注意:触发方式自选,如果是
<input>
输入框建议@blur
焦点离开时触发。
// 取到的年龄和性别
const data = this.getIcard('130355199811093358')
// 如果data为false,则证明身份证不合法
if(data){
console.log(data)//{gender: '女', age: 22}
}
写在后面
如果本篇获取的信息不满足于您的项目(比如还需要获取生日),
您可以根据 “计算规则” 自己手动增加代码。