/**
* @method 计算身份证号中的信息
* @param {string} idcard_no 身份证号
* @param {Array|null} validateAge 是否验证年龄,如需验证可传入年龄范围[最小.最大],若传入null则不验证
* @return {bool|Object} 号码不符合规则返回false,符合规则返回对象,包含age birth sex
*/
export const getIdcardInfo = (idcard_no, validateAge = [0, 100]) => {
let validate = /^[1-9]\d{5}(19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test(
idcard_no
);
if (validate !== true) return false;
let sex = null;
let birth = null;
let myDate = new Date();
let month = myDate.getMonth() + 1;
let day = myDate.getDate();
let age = 0;
if (idcard_no.length === 18) {
age = myDate.getFullYear() - idcard_no.substring(6, 10) - 1;
sex = idcard_no.substring(16, 17);
birth =
idcard_no.substring(6, 10) +
"-" +
idcard_no.substring(10, 12) +
"-" +
idcard_no.substring(12, 14);
age++;
} else if (idcard_no.length === 15) {
age = myDate.getFullYear() - idcard_no.substring(6, 8) - 1901;
sex = idcard_no.substring(13, 14);
birth =
"19" +
idcard_no.substring(6, 8) +
"-" +
idcard_no.substring(8, 10) +
"-" +
idcard_no.substring(10, 12);
age++;
}
// 验证年龄
if (validateAge instanceof Array) {
if (age < validateAge[0] || age > validateAge[1]) {
return false;
}
}
if (sex % 2 === 0) sex = "0";
else sex = "1";
return {
age,
sex,
birth,
};
};
以上是整个js
用法
1.先引用import { getIdcardInfo } from “@/tools/idcard”;
2let info = getIdcardInfo(value); 传入身份证号
if (!info) {
身份证格式不正确
} else {
身份证格式正确
}