二代身份证正则表达式
/^(([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]$/
这段正则表达式用于校验中国二代身份证号码的格式是否正确。其中,身份证号码由18位字符组成,前17位为数字,最后一位可能是数字或字母X。
正则表达式解释如下:
^
表示匹配字符串的开始位置;
([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2])
表示匹配第1-2位的数字,代表所在省份的代码;
\d{4}
表示匹配第3-6位的数字,代表所在城市的代码;
(([1][9]\d{2})|([2]\d{3}))
表示匹配第7-10位的数字,代表出生年份;
(([0][1-9])|([1][0-2]))
表示匹配第11-12位的数字,代表出生月份;
(([0][1-9])|([1-2][0-9])|([3][0-1]))
表示匹配第13-14位的数字,代表出生日期;
\d{3}
表示匹配第15-17位的数字,代表所在地区的代码;
[0-9xX]
表示匹配第18位的数字或字母X,代表校验位;
$
表示匹配字符串的结束位置。
一代身份证正则表达式
/^(([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}(\d{2})(0[1-9]|1[0-2])([0-2][1-9]|10|20|30|31])\d{3}$/
这段正则表达式用于校验中国一代身份证号码的格式是否正确。第一代身份证号码是由15位数字组成,前6位是地址码,接下来两位是年份的后两位,再接下来两位是月份,最后两位是日。
正则表达式解释如下:
与二代身份证基本上相同。区别在于:第一代身份证在前 6 位号码后没有完整出生年份,而二代的有完整的出生年份。并且第二代身份证没有最后一位的数字校验码
封装的函数(可直接调用)
传入参数 idcardTest:
身份证号
得到结果: 得到
person对象(包含年龄、性别、生日)
。若校验失败打印输入的身份证号长度不对,或者号码不符合规定!
具体代码如下所示:
idCardToAgeAndSex(idcardTest) {
// 一代身份证正则表达式
let idcardTest1 =
/^(([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}(\d{2})(0[1-9]|1[0-2])([0-2][1-9]|10|20|30|31])\d{3}$/;
// 二代身份证正则表达式
let idcardTest2 =
/^(([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]$/;
// 获取当前时间
let nowYear = new Date().getFullYear(); //获取当前年份
let nowMonth = new Date().getMonth(); //获取当前月份
let person = {
//最终信息保存于此
age: "",
sex: "",
birthday: "",
};
let idYear = 0; //获取身份证年份
let idMonth = ""; //获取身份证月份
let idDate = ""; //获取身份证日份
let sexCheck = ""; //获取身份证性别
//身份证校验
if (!uni.$u.test.idCard(idcardTest)) {
return person;
} else if (idcardTest1.test(idcardTest)) {
idYear = Number(idcardTest.slice(6, 8)) + Number(1900); //身份证年份
idMonth = idcardTest.slice(8, 10); //身份证月份
idDate = idcardTest.slice(10, 12); //身份证日份
sexCheck = idcardTest.slice(14, 15); //身份证性别
} else if (idcardTest2.test(idcardTest)) {
idYear = idcardTest.slice(6, 10); //身份证年份
idMonth = idcardTest.slice(10, 12); //身份证月份
idDate = idcardTest.slice(12, 14); //身份证日份
sexCheck = idcardTest.slice(16, 17); //身份证性别
}
// 年龄计算
if (nowMonth - idMonth >= 0) {
person.age = String(nowYear - idYear);
} else {
person.age = String(nowYear - idYear - 1);
}
// 生日拼接
person.birthday = idYear + "-" + idMonth + "-" + idDate;
// 性别判断
if (sexCheck % 2 == 0) {
person.sex = "女";
} else {
person.sex = "男";
}
return person;
},