• 【正则】二代身份证正则表达式


    CSDN话题挑战赛第2期
    参赛话题:学习笔记

    二代身份证号码解释

    1、前六位是地址码
    ●第一位、第二位表示省或直辖市或自治区;
    ●第三位、第四位代表市辖区;
    ●第五位、第六位代表区、县、市等
    2、中间8位出生年月日
    3、后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随机
    4、前六位与省市对应关系

  • 相关阅读:
    C 基础语法2 —— 数组
    Java线程池隔离原理
    Spring Boot学习笔记(十一)Druid数据源及动态数据源配置
    滑动窗口详解
    如何将动态页面静态化——模板文件(输出到一个文件里面)
    面向对象三大特征之多态
    一个获取当前登录机器IP的工具类
    刷题 | 计算任意长度整数之和
    C++实战-Linux多线程(入门到精通)
    webpack 解决:Cannot use import statement outside a module 的问题
  • 原文地址:https://blog.csdn.net/qq_31083947/article/details/126951837