18位身份证的正则表达式并说明

本文详细解析了18位身份证号码的正则表达式,包括地址码、生日码、顺序码及校验码的匹配规则,对各段进行深入分析,帮助理解身份证号码的构成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载链接:https://blog.csdn.net/zgrkaka/article/details/80341068

^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$

先拆分成五段
^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$
第一段为地址码,6位数字,不以0开头
第二三四段为生日码,18位身份证的生日码规则为年月日,例:2020年10月15日->20201015
第五段为顺序码+校验码,18位身份证的顺序码为3位数字,校验码1位,校验码为0-9或者大小写的英文X

对各段的详细解析:

  1. ^[1-9]\d{5}:匹配前6位地址码,不以0开头即以1-9开头,并匹配后续的5位数字
    因为不能以0开头,因此不能换成^\d{6},\d会匹配到0-9
  2. (18|19|([23]\d))\d{2}:匹配年份,匹配1800-3999年:
    (18|19|([23]\d)):匹配年份的前两位,18XX年19XX年,2开头的年份或者3开头的年份需要补齐一位,因此需要\d
    \d{2}:匹配完年份前两位需要补齐后续两位数字,因此需要\d{2}

对于[23]\d原链接里有人有疑问,在这里补充下:
中括号[ ]表示匹配中括号[ ]内的任意一个字符,只匹配一次
所以[23]只会匹配到一个2或者3,因为需要匹配到20XX-39XX的年份前两位,因此需要加上\d,再多匹配一个数字才能正确匹配
所以[23]\d的匹配的规则为 2加一个数字或者3加一个数字
因此(18|19|([23]\d))\d{2}才能正确匹配到18XX-39XX年

  1. ((0[1-9])|(10|11|12)):匹配月份
    (0[1-9]):匹配01-09的月份
    |(10|11|12):或者匹配10-12月份
  2. (([0-2][1-9])|10|20|30|31):匹配天数
    ([0-2][1-9]):匹配01-09、 11-19、21-29的天数
    |10|20|30|31:或者匹配10,20,30,31的天数
  3. \d{3}[0-9Xx]$:匹配最后四位,先匹配三位数字的顺序码,并以校验码结束,校验码为单个0-9或者大小写的X
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值