身份证校验(非常完整)
身份证校验(18位,15位,2月)
以下是一个身份证校验的方法,直接在前端调用该方法即可,用不到该方法的,方法后面有正则表达式解释
export function validateIdNumber(rule, value, callback) {
var reg = /^[1-9]\d{5}((\d{2}(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[13456789]|1[012])(0[1-9]|[12][0-9]|30))|(02(0[1-9]|1[0-9]|2[0-8]))))|(((0[48]|[2468][048]|[13579][26])|(00))0229))\d{2}[0-9Xx]$/;
var reg1 = /^[1-9]\d{5}((((19|[2-9][0-9])\d{2})(0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|(((19|[2-9][0-9])\d{2})(0[13456789]|1[012])(0[1-9]|[12][0-9]|30))|(((19|[2-9][0-9])\d{2})02(0[1-9]|1[0-9]|2[0-8]))|(((1[6-9]|[2-9][0-9])(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))0229))\d{3}[0-9Xx]$/;
if (value == '' || value == undefined || value == null) {
callback();
} else {
if (!reg.test(value) && !reg1.test(value)) {
callback(new Error('输入18位或15位正确的身份证号码!'));
} else {
callback();
}
}
}
方法详细解释
上述代码中的 var reg表示十五位的省份证校验;var reg1位18位的身份校验
下面展示 15位身份校验
。
// 15位省份证校验
var reg = /^[1-9]\d{5}((\d{2}(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[13456789]|1[012])(0[1-9]|[12][0-9]|30))|(02(0[1-9]|1[0-9]|2[0-8]))))|(((0[48]|[2468][048]|[13579][26])|(00))0229))\d{2}[0-9Xx]$/;
注释:
15位身份证号码的含义:
1-2位省、自治区、直辖市代码;
3-4位地级市、盟、自治州代码;
5-6位县、县级市、区代码;
7-8位出生年份(后两位数,比如1960年出生,就是60);
9-12位是出生月份余出生日期
13-15位为顺序号,其中15位男为单数,女为双数;
前六位数字代码:[1-9]\d{5}
中间六位数字代码:((\d{2}(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[13456789]|1[012])(0[1-9]|[12][0-9]|30))|(02(0[1-9]|1[0-9]|2[0-8]))))|(((0[48]|[2468][048]|[13579][26])|(00))0229))
// (\d{2}(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[13456789]|1[012])(0[1-9]|[12][0-9]|30))|(02(0[1-9]|1[0-9]|2[0-8]))))中表示\d{2}为年份;
// ((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))表示大月可以有31天,前面(0[13578]|1[02])表示月份,01月或者03月,05月,07月,08月,10月,12月;后面(0[1-9]|[12][0-9]|3[01])表示身份证的日,01,02...因为是大月可以为31号;
// (0[13456789]|1[012])(0[1-9]|[12][0-9]|30)) 表示除了2月份,其他的月份都可以校验30号,(0[13456789]|1[012])表示月份01月或03月到12月,(0[1-9]|[12][0-9]|30)表示日,01到30号;
//(02(0[1-9]|1[0-9]|2[0-8]))表示2月份,01-28号;
// (((0[48]|[2468][048]|[13579][26])|(00))0229))这部分和上面部分不一样,表示闰年的时候2月份有29天,当年份为04,08,或者20,60,或者72,96或者...年的时候2月可以为29号;
后三位数字代码:\d{2}[0-9Xx]
下面展示 18位身份校验
。
//18位身份证校验
var reg1 = /^[1-9]\d{5}((((19|[2-9][0-9])\d{2})(0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|(((19|[2-9][0-9])\d{2})(0[13456789]|1[012])(0[1-9]|[12][0-9]|30))|(((19|[2-9][0-9])\d{2})02(0[1-9]|1[0-9]|2[0-8]))|(((1[6-9]|[2-9][0-9])(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))0229))\d{3}[0-9Xx]$/;
// 注释
18位身份证号码的含义:
前六位数字代码:[1-9]\d{5}
中间八位数字代码:((((19|[2-9][0-9])\d{2})(0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|(((19|[2-9][0-9])\d{2})(0[13456789]|1[012])(0[1-9]|[12][0-9]|30))|(((19|[2-9][0-9])\d{2})02(0[1-9]|1[0-9]|2[0-8]))|(((1[6-9]|[2-9][0-9])(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))0229))
// (((19|[2-9][0-9])\d{2})(0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))表示几几年到以后的年份,大月可以有31号;
// (((19|[2-9][0-9])\d{2})(0[13456789]|1[012])(0[1-9]|[12][0-9]|30))表示几几年除了2月份,每个月都可以有30号;
// (((19|[2-9][0-9])\d{2})02(0[1-9]|1[0-9]|2[0-8]))表示正常年份的2月可以有28号;
// (((1[6-9]|[2-9][0-9])(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))0229)表示闰年的2月份可以有29号;
后四位数字代码:\d{3}[0-9Xx]