需求:给定一个字符串,从中提取出身份证号

关于验证15位和18位身份证号的正则表达式可以参考下面的内容:
http://www.cppcns.com/wangluo/re/183062.html

一、18位身份证号各个数字代表的含义
1-2位:省、自治区、直辖市代码
3-4位:地级市、盟、自治州代码
5-6位:县、县级市、区代码
7-14位:出生年月日
15-17位:顺序号,17位男为单数,女为双数
18位:校验位(0-9,Xx)

二、15位身份证号
1-2位:省、自治区、直辖市代码
3-4位:地级市、盟、自治州代码
5-6位:县、县级市、区代码
7-12位:出生年月日
13-15位:顺序号,15位男为单数,女为双数

三、18位身份证与15位身份证号的区别
15位身份证号没有效验码和出生年份的“19”或“20”

四、校验位的计算

  • 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。
  • 5、通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。
  • 例如:某男性的身份证号码是34052419800101001X。我们要看看这个身份证是不是合法的身份证。
  • 首先我们得出前17位的乘积和是189,然后用189除以11得出的结果是17+2/11,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的数字是x。所以,可以判定这是一个合格的身份证号码。

五、身份证前两位地区编码:
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-澳门,91-国外

六、下面贴上代码,供自己学习使用:
6.1 身份证前两位对应的省份

 @SuppressWarnings("unchecked")private static Hashtable getAreaCode() {Hashtable hashtable = new Hashtable();hashtable.put("11", "北京");hashtable.put("12", "天津");hashtable.put("13", "河北");hashtable.put("14", "山西");hashtable.put("15", "内蒙古");hashtable.put("21", "辽宁");hashtable.put("22", "吉林");hashtable.put("23", "黑龙江");hashtable.put("31", "上海");hashtable.put("32", "江苏");hashtable.put("33", "浙江");hashtable.put("34", "安徽");hashtable.put("35", "福建");hashtable.put("36", "江西");hashtable.put("37", "山东");hashtable.put("41", "河南");hashtable.put("42", "湖北");hashtable.put("43", "湖南");hashtable.put("44", "广东");hashtable.put("45", "广西");hashtable.put("46", "海南");hashtable.put("50", "重庆");hashtable.put("51", "四川");hashtable.put("52", "贵州");hashtable.put("53", "云南");hashtable.put("54", "西藏");hashtable.put("61", "陕西");hashtable.put("62", "甘肃");hashtable.put("63", "青海");hashtable.put("64", "宁夏");hashtable.put("65", "新疆");hashtable.put("71", "台湾");hashtable.put("81", "香港");hashtable.put("82", "澳门");hashtable.put("91", "国外");return hashtable;}

6.2判断身份证最后一位的值: 将身份证号码的前17位数分别乘以不同的系数, 将这17位数字和系数相乘的结果相加,用加出来的和除以11,得到余数, 根据余数的值得出最后一位身份证号码。

public static boolean judgeIdcardEnd(String str) {boolean flag = true;String idcard = "";int TotalmulAiWi = 0;String[] ValCodeArr = { "1", "0", "x", "9", "8", "7", "6", "5", "4", "3", "2" };String[] Wi = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2" };idcard = str.substring(0, 17);// 得到身份证号前17位for (int i = 0; i < 17; i++) {TotalmulAiWi = TotalmulAiWi + Integer.parseInt(String.valueOf(idcard.charAt(i))) * Integer.parseInt(Wi[i]);}int modValue = TotalmulAiWi % 11; // 取余String strVerifyCode = ValCodeArr[modValue];// 通过余数得到最后一位身份证号if (strVerifyCode.equals("x")) {    idcard = idcard + strVerifyCode;if (idcard.equals(str) == false) {  //如果为false,说明身份证号最后一位为XstrVerifyCode = "X";            //将最后一位身份证号赋值为XString idcard1 = idcard.substring(0, 17);  //重新截取前17位数idcard1 = idcard1 + strVerifyCode;if (idcard1.equals(str) == false) {return false;}}} else {idcard = idcard + strVerifyCode;if (idcard.equals(str) == false) {return false;}}return flag;}

6.3 提取18位身份证号并验证18位身份证号

public static List<String> extractIdcard18(String str) {List<String> idcard18List = new ArrayList<>();Pattern pattern = Pattern.compile("[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]");Matcher matcher = pattern.matcher(str);while (matcher.find()) {String str1 = matcher.group();// 判断身份证前两位地区编码是否存在Hashtable h = getAreaCode();if (h.get(str1.substring(0, 2)) != null && judgeIdcardEnd(str1)) {idcard18List.add(str1);System.out.println("18位身份证号是:" + idcard18List);}}return idcard18List;}

七、 本文总结
首先通过正则表达式提取出18位数字,在正则表达式中对身份证号上的出生年月日已经做出了相应的验证,所以后续需要进行验证的则是前6位和后4位,本文已对前2位数字进行验证,但对于3-6位身份证号并没有做出相应的验证,对15-17位也没有验证,仅通过计算校验位的方式来进行识别,总体上实现了对身份证号的提取。

正则表达式验证身份证号以及验证校验位的正确性相关推荐

  1. 身份证号的验证与解析

    最近参加一些招聘,很多时候时候身份证号都会作为表单的一部分,需要用户进行填写.有些表单在填写了身份证号之后,还需要用户手动填写籍贯.性别.出生年月.以及年龄等信息,其实这些信息都在身份证号里面包含了. ...

  2. python判断身份证是否合法的函数_Python开发之身份证验证库id_validator验证身份证号合法性及根据身...

    上个星期,大佬分享了一个验证身份证号合法性的库:id_validator,没空去试着用一下看看,今天有点时间,来试着用下这个库. 1.首先,要安装这个库,windows+R键运行cmd,打开命令行窗口 ...

  3. 身份证号合法性验证、电话手机验证、邮箱验证、银行卡验证、车牌验证

    js验证: 身份证号合法性验证 电话手机验证 邮箱验证 银行卡验证 车牌验证 //身份证号合法性验证 //支持15位和18位身份证号 //支持地址编码.出生日期.校验位验证 function Iden ...

  4. js进阶正则表达式15验证身份证号(|符号的使用:var reg=/^\d{17}[\d|X]$|^\d{15}$/)(str的方法substr)...

    js进阶正则表达式15验证身份证号(|符号的使用:var reg=/^\d{17}[\d|X]$|^\d{15}$/)(str的方法substr) 一.总结 1.|符号的使用:var reg=/^\d ...

  5. 身份证校验(//身份证号合法性验证 //支持15位和18位身份证号//支持地址编码、出生日期、校验位验证)

    window.checkIdNumber=(function () {var vcity = {11: "北京", 12: "天津", 13: "河北 ...

  6. js实现完美身份证号有效性验证+身份证与姓名匹配

    /* 根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位 ...

  7. js身份证号有效性验证

    js身份证号有效性验证 1.简述 最近做的系统有用到实名验证的,起初对于用户身份证号只是简单地使用正则表达式进行验证, 很多无效的身份证号就成了漏网之鱼. 导致后台存表里很多无效的身份证号,随便输入用 ...

  8. 用python判断身份证号性别_验证身份证号的Python脚本

    引用 a[0], a[1], a[2], a[3], ..., a[16], a[17] 其中a[i]表示第i位数字,i=0,1,2,...,17,如果最后一位(校验位)是X,则a[17]=10 每一 ...

  9. javascript实现完美身份证号有效性验证15位18位

    欢迎各位朋友!   前几天在开发中要求对用户的身份证号进行比较严格的校验,所以才有了这些代码, 下面的这些代码主要包括对身份证长度,地区,出生日期的校验. 方法在return时返回了一个是否通过以及提 ...

最新文章

  1. 1.4 微生物对人类社会的影响
  2. MongoDB 数据库创建、删除、表(集合) 创建删除、数据的增、删、改、查
  3. UE4之TextureSample
  4. Silverlight Tools 安装失败 解决办法
  5. mschart控件_使用MSChart控件绘制图表。
  6. 地图找房(四)02——小区房源列表展示和隐藏 小区房源列表数据填充 接口数据-图片地址的基准路径
  7. 黑客之门:深入浅出windows的dll文件[图]
  8. ubuntu20.04下源码安装hyperscan库安装记录
  9. 宋红康JVM 学习笔记
  10. 【MODBUS通讯协议】
  11. python中对fits文件读取和保存
  12. 计算机网络发展的第四阶段特点,计算机网络基础考试重点.doc
  13. 11月29日做题截图
  14. 【第五课】UAV倾斜摄影测量三维建模之空三计算问题
  15. html表格方式实现商品详情
  16. 大华摄像头java开发之抓图
  17. 跨境电商的痛点有哪些?
  18. 数据库和表的基本操作
  19. php sql injection,PHP防止SQL Injection
  20. 【Proteus仿真】利用74LS148扩展单片机中断

热门文章

  1. Python 视频转换为图片 与 图片转换为视频
  2. InputStream读取数据
  3. 关于单片机上的BOOT0和BOOT1
  4. Serializable transient
  5. git pull常见操作
  6. 专访 IJCAI 17 杰出青年科学家夏立荣博士:以人为本,是群体决策的必由之路
  7. 相距两千多公里,仅仅数月,从相亲走到结婚 | 2022年复盘日记
  8. PTA 7-2 一帮一
  9. AM335x DDR3配置
  10. web漏洞扫描器-Burpsuite 常规测试