身份证号码正则表达式详解

这篇具有很好参考价值的文章主要介绍了身份证号码正则表达式详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、结构:

公民身份号码是特征组合码,由十七位数字本体码和一校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

地址码身份证号码第一位到第六位表示编码对象常住户口所在行政区划代码,按GB/T2260的规定执行

华北地区:北京市|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

港澳地区:香港特别行政区|810000,澳门特别行政区|820000

台湾地区:台湾省|830000

2019年12月中华人民共和国县以上行政区划代码

身份证号码正则表达式详解

中国大陆居民身份证号码中的地址码的数字编码规则为:

第一、二位表示省级行政区。

第一位数字是以前的大区制代码。第二位是大区所在省市编码。全国共分为8个大区:华北(1)、东北(2)、华东(3)、华南(4)、西南(5)、西北(6)、台湾(7)和港澳(8)。

第三、四位表示地级行政区。其中,01-20,51-70表示地级市;21-50表示地区、自治州、盟;90表示省直辖县级行政单位;直辖市身份证中01表示市辖区,02表示县。

第五、六位表示县级行政区。01-18表示市辖区或地区、自治州、盟辖县级市;21-80表示县、旗;81-99表示省直辖县级行政单位。

出生日期码身份证号码第七位到第十四位)表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。按GB/T7408的规定执行。

顺序码身份证号码第十五位到第十七位)表示在同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。其中第十七位奇数分给男性,偶数分给女性。

校验码身份证号码第十八位)根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。

计算方法

1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。

2、将这17位数字和系数相乘的结果相加。

3、用加出来和除以11,看余数是多少。

4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X -9-8-7-6-5-4-3-2。(即余数0对应1,余数1对应0,余数2对应X...)

5、通过上面得知如果余数是3,就会在身份证的第18位数字上出现的是9。如果对应的数字是2,身份证的最后一位号码就是罗马数字X。

例如:某男性的身份证号码为【53010219200508011X】, 我们看看这个身份证是不是符合计算规则的身份证。

首先我们得出前17位的乘积和【5×7+3×9+0×10+1×5+0×8+2×4+1×2+9×1+2×6+0×3+0×7+5×9+0×10+8×5+0×8+1×4+1×2】是189,然后用189除以11得出的结果是189÷11=17余下2,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的检验码是X。所以,可以判定这是一个正确的身份证号码。

2、匹配规则

地址码规则: 地址码长6位可简单描述为以数字1-9开头后5位为0-9的数字根据以上规则,写出地址码的正则表达式:

 /^[1-9]\d{5}/

复杂点可全部覆盖现有规定的地址:

/((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|[7-9]1)\d{4}/

②出生日期码规则

年份长4位 以数字192021开头 剩余两位为0-9的数字 根据以上规则,写出年份码的正则表达式:

/(19|20|21)\d{2}/

月份长2位 第一位数字为0,第二位数字为1-9 或者第一位数字为1,第二位数字为0-2 根据以上规则,写出月份码的正则表达式:

/((0[1-9])|(1[0-2]))/

日期长2位 第一位数字为0-2,第二位数字为1-9 或者是10,20,30,31 根据以上规则,写出日期码的正则表达式 :

/(([0-2][1-9])|10|20|30|31)/

顺序码规则顺序码长3位顺序码是数字根据以上规则,写出顺序码的正则表达式 :

/\d{3}/

④校验码规则:校验码长1位,可以是数字,字母x或字母X。根据以上规则,写出校验码的正则表达式 :

/[0-9Xx]/

3、最终结果:

/^[1-9]\d{5}(19|20|21)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;

或者是:

/^((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|[7-9]1)\d{4}(19|20|21)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;文章来源地址https://www.toymoban.com/news/detail-455148.html

4、Java实现:

private static boolean identityFormatCheck(String identityNum) {
    Pattern pattern = Pattern.compile(identityRegix );
    Matcher matcher = pattern.matcher(identityNum);
    return matcher.matches();
}

private static final String identityRegix = "^((1[1-5])|(2[1-3])|(3[1-7])|(4[1-6])|(5[0-4])|(6[1-5])|[7-9]1)\d{4}(19|20|21)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$";

到了这里,关于身份证号码正则表达式详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包