1. /**
  2. * 18位身份证校验,粗略的校验
  3. * @author lyl
  4. * @param idCard
  5. * @return
  6. */
  7. public static boolean is18ByteIdCard(String idCard){
  8. Pattern pattern1 = Pattern.compile("^(\\d{6})(19|20)(\\d{2})(1[0-2]|0[1-9])(0[1-9]|[1-2][0-9]|3[0-1])(\\d{3})(\\d|X|x)?$"); //粗略的校验
  9. Matcher matcher = pattern1.matcher(idCard);
  10. if(matcher.matches()){
  11. return true;
  12. }
  13. return false;
  14. }
  15. /**
  16. * 18位身份证校验,比较严格校验
  17. * @author lyl
  18. * @param idCard
  19. * @return
  20. */
  21. public static boolean is18ByteIdCardComplex(String idCard){
  22. Pattern pattern1 = Pattern.compile("^(\\d{6})(19|20)(\\d{2})(1[0-2]|0[1-9])(0[1-9]|[1-2][0-9]|3[0-1])(\\d{3})(\\d|X|x)?$");
  23. Matcher matcher = pattern1.matcher(idCard);
  24. int[] prefix = new int[]{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
  25. int[] suffix = new int[]{ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 };
  26. if(matcher.matches()){
  27. Map<String, String> cityMap = initCityMap();
  28. if(cityMap.get(idCard.substring(0,2)) == null ){
  29. return false;
  30. }
  31. int idCardWiSum=0; //用来保存前17位各自乖以加权因子后的总和
  32. for(int i=0;i<17;i++){
  33. idCardWiSum+=Integer.valueOf(idCard.substring(i,i+1))*prefix[i];
  34. }
  35. int idCardMod=idCardWiSum%11;//计算出校验码所在数组的位置
  36. String idCardLast=idCard.substring(17);//得到最后一位身份证号码
  37. //如果等于2,则说明校验码是10,身份证号码最后一位应该是X
  38. if(idCardMod==2){
  39. if(idCardLast.equalsIgnoreCase("x")){
  40. return true;
  41. }else{
  42. return false;
  43. }
  44. }else{
  45. //用计算出的验证码与最后一位身份证号码匹配,如果一致,说明通过,否则是无效的身份证号码
  46. if(idCardLast.equals(suffix[idCardMod]+"")){
  47. return true;
  48. }else{
  49. return false;
  50. }
  51. }
  52. }
  53. return false;
  54. }
  55. private static Map<String, String> initCityMap(){
  56. Map<String, String> cityMap = new HashMap<String, String>();
  57. cityMap.put("11", "北京");
  58. cityMap.put("12", "天津");
  59. cityMap.put("13", "河北");
  60. cityMap.put("14", "山西");
  61. cityMap.put("15", "内蒙古");
  62. cityMap.put("21", "辽宁");
  63. cityMap.put("22", "吉林");
  64. cityMap.put("23", "黑龙江");
  65. cityMap.put("31", "上海");
  66. cityMap.put("32", "江苏");
  67. cityMap.put("33", "浙江");
  68. cityMap.put("34", "安徽");
  69. cityMap.put("35", "福建");
  70. cityMap.put("36", "江西");
  71. cityMap.put("37", "山东");
  72. cityMap.put("41", "河南");
  73. cityMap.put("42", "湖北");
  74. cityMap.put("43", "湖南");
  75. cityMap.put("44", "广东");
  76. cityMap.put("45", "广西");
  77. cityMap.put("46", "海南");
  78. cityMap.put("50", "重庆");
  79. cityMap.put("51", "四川");
  80. cityMap.put("52", "贵州");
  81. cityMap.put("53", "云南");
  82. cityMap.put("54", "西藏");
  83. cityMap.put("61", "陕西");
  84. cityMap.put("62", "甘肃");
  85. cityMap.put("63", "青海");
  86. cityMap.put("64", "宁夏");
  87. cityMap.put("65", "新疆");
  88. //          cityMap.put("71", "台湾");
  89. //          cityMap.put("81", "香港");
  90. //          cityMap.put("82", "澳门");
  91. //          cityMap.put("91", "国外");
  92. //          System.out.println(cityMap.keySet().size());
  93. return cityMap;
  94. }

java校验身份证号码的更多相关文章

  1. JAVA验证身份证号码是否正确

    package com.IdCard; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.D ...

  2. JAVA通过身份证号码获取出生日期、年龄、性别

    JAVA验证身份证号码是否正确:https://www.cnblogs.com/pxblog/p/12038278.html /** * 通过身份证号码获取出生日期(birthday).年龄(age) ...

  3. Java实现身份证号码校验

    二话不说,直接上代码. package hope.identitycodecheck.demo; import java.text.DateFormat; import java.text.Simpl ...

  4. 【Java】身份证号码验证

    代码引用自:https://gitee.com/appleat/codes/ynrtqujv0wfgesm8ia9b547 package xxx; /** * Created by wdj on 2 ...

  5. JAVA验证身份证号码是否合法

    package com.chauvet.utils; import java.text.ParseException; import java.text.SimpleDateFormat; impor ...

  6. Java实现身份证号码验证源码分享

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

  7. Java的身份证号码工具类

    /** * Copyright (C) 2009-2010 Yichuan, Fuchun All rights reserved. * Licensed to the Apache Software ...

  8. java验证身份证号码是否有效源代码 wn25的头像 wn25 23 2015-01-04 20:09 6 基本信息 Java × 1 浏览

    原文:http://www.open-open.com/code/view/1420373343171 1.描述 用java语言判断身份证号码是否有效,地区码.出身年月.校验码等验证算法 2.源代码 ...

  9. java验证身份证号码是否有效源代码

    原文:http://www.open-open.com/code/view/1420373343171 1.描述 用java语言判断身份证号码是否有效,地区码.出身年月.校验码等验证算法 2.源代码 ...

随机推荐

  1. 探究Android中通过继承ViewGroup自定义控件的原理

    原文地址:http://www.cnblogs.com/kross/p/3378395.html 今天断断续续的折腾了一下午到现在20:38,终于有点明白了.o(╯□╰)o 在Android开发中,我 ...

  2. 分享:50行代码监听watch小程序的globalData

    监听方法: // 在任何组件.页面,例如页面 const app = getApp( ); Page({ onLoad: function( ) { app.watch$('role', ( val, ...

  3. CTSC2012-Cheat

    题意 给出一些母01串,多次询问,每次询问一个01串,问一个最大的\(L\),使得可以在询问串中选出若干个不相交的,长度大于等于\(L\)的子串,这些子串都在母串中出现过,且子串的长度和大于等于询问串 ...

  4. BZOJ 2004 公交线路(状压DP+矩阵快速幂)

    注意到每个路线相邻车站的距离不超过K,也就是说我们可以对连续K个车站的状态进行状压. 然后状压DP一下,用矩阵快速幂加速运算即可. #include <stdio.h> #include ...

  5. jmeter同步定时器

    同步定时器是jmeter中一个比较重要的定时器,同步定时器,相当于一个储蓄池,累积一定的请求,当在规定的时间内达到一定的线程数量,这些线程会在同一个时间点一起并发,可以用来做大数据量的并发请求. 验证 ...

  6. Lyft Level 5 Challenge 2018 - Elimination Round翻车记

    打猝死场感觉非常作死. A:判一下起点和终点是否在其两侧即可. #include<iostream> #include<cstdio> #include<cmath> ...

  7. 洛谷 P2015 二叉苹果树

    老规矩,先放题面 题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端 ...

  8. Expect the Expected UVA - 11427(概率dp)

    题意: 每天晚上你都玩纸牌,如果第一次就赢了,就高高兴兴的去睡觉,如果输了就继续玩.假如每盘游戏你获胜的概率都为p,每盘游戏输赢独立.如果当晚你获胜的局数的比例严格大于p时才停止,而且每天晚上最多只能 ...

  9. [BZOJ4540][HNOI2016]序列 莫队

    4540: [Hnoi2016]序列 Time Limit: 20 Sec  Memory Limit: 512 MB Description 给定长度为n的序列:a1,a2,…,an,记为a[1:n ...

  10. day29:关闭服务|

    1. 在centos6系统里,我们可以使用ntsysv关闭不需要开机启动的服务,当然也可以使用chkconfig工具来实现. 写一个shell脚本,用chkconfig工具把不常用的服务关闭.脚本需要 ...