下面是关于“Node.js通过身份证号验证年龄、出生日期与性别方法示例”的完整攻略:
1. 需求分析
首先我们需要明确我们的需求,就是通过身份证号获取到对应的年龄、出生日期和性别这几个信息。身份证号通常有15位和18位两种格式,我们需要对这两种格式都进行处理。具体的需求分析可以如下:
- 输入参数:身份证号(String类型)
- 输出结果:年龄、出生日期和性别(Object类型)
2. 实现方法
2.1 获取身份证号中的信息
首先我们需要获取到身份证号中的信息,包括出生日期和性别。对于18位身份证号来说,前17位是数字,最后一位可能是数字也可能是X,表示性别的第17位是奇数还是偶数就能确定性别,出生日期则是前6位。对于15位身份证号来说,前6位是出生日期,接下来是3位序号,最后一位是校验位。我们可以通过正则表达式来获取出生日期和性别:
function getIdCardInfo(idCard) {
let info = {};
if (idCard.length === 15) {
let reg = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
let arr = idCard.match(reg);
info.birth = `19${arr[2]}-${arr[3]}-${arr[4]}`;
info.sex = arr[5] % 2 == 0 ? '女' : '男';
} else if (idCard.length === 18) {
let reg = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})(\d|X)$/;
let arr = idCard.match(reg);
info.birth = `${arr[2]}-${arr[3]}-${arr[4]}`;
info.sex = arr[17] % 2 == 0 ? '女' : '男';
}
return info;
}
2.2 计算年龄
由于JavaScript中没有与日期相关的类型,我们需要使用第三方库来处理日期。我这里使用的是moment.js库来处理日期。计算年龄的方法就是当前年份减去出生年份,还需要判断出生月份和当前月份是否相等,如果相等再比较日期大小即可:
const moment = require('moment');
function calcAge(birthday) {
const now = moment();
const birth = moment(birthday, 'YYYY-MM-DD');
let age = now.year() - birth.year();
if (now.month() < birth.month() ||
(now.month() == birth.month() && now.date() < birth.date())) {
age--;
}
return age;
}
2.3 完整实现
将获取身份证号信息和计算年龄的方法结合起来,最终的实现代码如下所示:
const moment = require('moment');
function getIdCardInfo(idCard) {
let info = {};
if (idCard.length === 15) {
let reg = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
let arr = idCard.match(reg);
info.birth = `19${arr[2]}-${arr[3]}-${arr[4]}`;
info.sex = arr[5] % 2 == 0 ? '女' : '男';
} else if (idCard.length === 18) {
let reg = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})(\d|X)$/;
let arr = idCard.match(reg);
info.birth = `${arr[2]}-${arr[3]}-${arr[4]}`;
info.sex = arr[17] % 2 == 0 ? '女' : '男';
}
return info;
}
function calcAge(birthday) {
const now = moment();
const birth = moment(birthday, 'YYYY-MM-DD');
let age = now.year() - birth.year();
if (now.month() < birth.month() ||
(now.month() == birth.month() && now.date() < birth.date())) {
age--;
}
return age;
}
function checkIdCard(idCard) {
if (!/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(idCard)) {
return {
isOk: false,
errMsg: '身份证号格式错误'
};
}
const info = getIdCardInfo(idCard);
const age = calcAge(info.birth);
return {
isOk: true,
age: age,
birth: info.birth,
sex: info.sex
};
}
3. 示例说明
示例1:验证18位身份证号
我们来模拟一个身份证号:420625199210290773
console.log(checkIdCard('420625199210290773'));
输出结果:
{
isOk: true,
age: 28,
birth: '1992-10-29',
sex: '男'
}
示例2:验证15位身份证号
我们来模拟一个身份证号:130503670401001
console.log(checkIdCard('130503670401001'));
输出结果:
{
isOk: true,
age: 54,
birth: '1967-04-01',
sex: '女'
}
以上就是关于如何通过Node.js验证身份证号获取到年龄、出生日期和性别的完整攻略,希望可以帮助到您。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js通过身份证号验证年龄、出生日期与性别方法示例 - Python技术站