二代身份证正则表达式分析

382 阅读3分钟

二代身份证号码解释

  1. 前六位是地址码
  • 第一位、第二位表示省或直辖市或自治区;
  • 第三位、第四位代表市辖区;
  • 第五位、第六位代表区、县、市等
  1. 中间8位出生年月日
  2. 后4位
  • 3位顺序码
  • 1位校验位组成

二代身份证地址码

  华北地区:北京市|110000,天津市|120000,河北省|130000,山西省|140000,内蒙古自治区|150000

  东北地区: 辽宁省|210000,吉林省|220000,黑龙江省|230000

  华东地区: 上海市|310000,江苏省|320000,浙江省|330000,安徽省|340000,福建省|350000,江西省|360000,山东省|370000

  华中地区: 河南省|410000,湖北省|420000,湖南省|430000

  华南地区:广东省|440000,广西壮族自治区|450000,海南省|460000

  西南地区:重庆市|500000,四川省|510000,贵州省|520000,云南省|530000,西藏自治区|540000

  西北地区: 陕西省|610000,甘肃省|620000,青海省|630000,宁夏回族自治区|640000,新疆维吾尔自治区|650000

  特别地区:台湾省|710000,香港特别行政区|810000,澳门特别行政区|820000


身份证正则表达式

表达式一: 第1位数字范围是1至8: [1-8] 第2位数字范围是0至7: [0-7] 第3至第6位: [0-9]{4} 第7至10位表示年,范围在1900年-2099年: (19|20)[0-9]{2} 第11至12位(月): ((0[1-9])|(10|11|12)) 第13至14位(日): (([0-2][1-9])|10|20|30|31) 第15至18位: [0-9]{3}[0-9Xx]


表达式一

[1-8][1-7][0-9]{4}(19|20)[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{3}[0-9Xx]


表达式二(列举前两位所有的组合):

(11|12|13|14|15|21|22|23|31|32|33|34|35|36|37|41|42|43|44|45|46|50|51|52|53|54|61|62|63|64|65|71|81|82)[0-9]{4}(19|20)[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{3}[0-9Xx]


表达式三(在表达式二的基础上优化):

(1[1-5]|2[1-3]|3[1-7]|4[1-6]|5[0-4]|6[1-5]|71|8[1-2])[0-9]{4}(19|20)[0-9]{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)[0-9]{3}[0-9Xx]


注意点:

  1. 前两位数字依旧可以做范围的缩减,比如第1位数字是1,第2位数字的范围只会是1-5
  2. 第2位数字只有重庆是0,也就是说只有“50”这个组合,这里也可以优化
  3. 第3至6位,由于数量太大,所有这里直接给了0-9随机