身份证15位,18位规则校验(完整)

身份证校验(非常完整)

身份证校验(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]
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
身份证号码是由18位15数字组成的,其中最后一可能是数字或字母X。下面是Java代码实现身份证号码校验的方法: 1. 验证15身份证号码: ``` public static boolean isIDCard15(String idCard) { if (idCard == null || idCard.trim().length() != 15) { return false; } if (!idCard.matches("^\\d{15}$")) { return false; } String provinceCode = idCard.substring(0, 2); if (!isValidProvinceCode(provinceCode)) { return false; } String birthday = "19" + idCard.substring(6, 12); return isValidDate(birthday); } private static boolean isValidProvinceCode(String provinceCode) { // 省份代码规则校验 } private static boolean isValidDate(String date) { // 日期格式校验 } ``` 2. 验证18位身份证号码: ``` public static boolean isIDCard18(String idCard) { if (idCard == null || idCard.trim().length() != 18) { return false; } if (!idCard.matches("^\\d{17}[\\dXx]$")) { return false; } String provinceCode = idCard.substring(0, 2); if (!isValidProvinceCode(provinceCode)) { return false; } String birthday = idCard.substring(6, 14); if (!isValidDate(birthday)) { return false; } if (!isValidVerifyCode(idCard)) { return false; } return true; } private static boolean isValidVerifyCode(String idCard) { // 校验规则校验 } ``` 其中,isValidProvinceCode() 方法用于校验省份代码规则,isValidDate() 方法用于校验日期格式,isValidVerifyCode() 方法用于校验校验规则,这些方法的具体实现可以根据实际需求进行编写。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值