1.身份证最后的X应该是大写的,我在这个工具类中没有将小写转化为转化为大写,有需要这一点的需要自己转化。
2.String[] wf = { “1”, “0”, “X”, “9”, “8”, “7”, “6”, “5”, “4”, “3”, “2” }; 顺序不能变!

package com.hikvision.ctm05jotp.util;import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Hashtable;
import java.util.regex.Matcher;
import java.util.regex.Pattern;/*** @author : youxiaowei* @date : 2019/7/29 11:09*/
public class IdCardUtil {/***身份证验证* @param idStr* @return 校验信息,correct为成功,失败会返回对应的失败原因*/public static String IdentityCardVerification(String idStr){String[] wf = { "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" };String[] checkCode = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2" };String iDCardNo = "";try {//判断号码的长度 15位或18位if (idStr.length() != 15 && idStr.length() != 18) {return "身份证号码长度应该为15位或18位";}if (idStr.length() == 18) {iDCardNo = idStr.substring(0, 17);} else if (idStr.length() == 15) {iDCardNo = idStr.substring(0, 6) + "19" + idStr.substring(6, 15);}if (isStrNum(iDCardNo) == false) {return "身份证15位号码都应为数字;18位号码除最后一位外,都应为数字";}//判断出生年月String strYear = iDCardNo.substring(6, 10);// 年份String strMonth = iDCardNo.substring(10, 12);// 月份String strDay = iDCardNo.substring(12, 14);// 月份if (isStrDate(strYear + "-" + strMonth + "-" + strDay) == false) {return "身份证生日无效";}GregorianCalendar gc = new GregorianCalendar();SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");if ((gc.get(Calendar.YEAR) - Integer.parseInt(strYear)) > 150 || (gc.getTime().getTime() - s.parse(strYear + "-" + strMonth + "-" + strDay).getTime()) < 0) {return "身份证生日不在有效范围";}if (Integer.parseInt(strMonth) > 12 || Integer.parseInt(strMonth) == 0) {return "身份证月份无效";}if (Integer.parseInt(strDay) > 31 || Integer.parseInt(strDay) == 0) {return "身份证日期无效";}//判断地区码Hashtable h = GetAreaCode();if (h.get(iDCardNo.substring(0, 2)) == null) {return "身份证地区编码错误";}//判断最后一位int theLastOne = 0;for (int i = 0; i < 17; i++) {theLastOne = theLastOne + Integer.parseInt(String.valueOf(iDCardNo.charAt(i))) * Integer.parseInt(checkCode[i]);}int modValue = theLastOne % 11;String strVerifyCode = wf[modValue];iDCardNo = iDCardNo + strVerifyCode;if (idStr.length() == 18 && !iDCardNo.equals(idStr)) {return "身份证无效,不是合法的身份证号码";}}catch (Exception e){e.printStackTrace();}return "correct";}/*** 地区代码* @return Hashtable*/private static Hashtable GetAreaCode() {Hashtable<String,String> hashtable = new Hashtable<String,String>();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;}/*** 判断字符串是否为数字* @param str* @return*/private static boolean isStrNum(String str) {Pattern pattern = Pattern.compile("[0-9]*");Matcher isNum = pattern.matcher(str);if (isNum.matches()) {return true;} else {return false;}}/*** 判断字符串是否为日期格式* @param strDate* @return*/public static boolean isStrDate(String strDate) {Pattern pattern = Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$");Matcher m = pattern.matcher(strDate);if (m.matches()) {return true;} else {return false;}}}

Java校验身份证号码的工具类相关推荐

  1. Java 身份证号码验证工具类

    package cn.hlq.test;import java.text.ParseException; import java.text.SimpleDateFormat; import java. ...

  2. java 手机号脱敏,身份证号脱敏 工具类

    java 手机号脱敏,身份证号脱敏 工具类 import org.apache.commons.lang3.StringUtils;/*** * @title: 脱敏工具类* @author: wll ...

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

    一.原理 参考文件:http://c.gb688.cn/bzgk/gb/showGb?type=online&hcno=080D6FBF2BB468F9007657F26D60013E. 实现 ...

  4. java根据身份证号码得到生日和性别

    java根据身份证号码得到生日和性别 IDCards工具类 执行结果 IDCards工具类 package com.liantuo.finance.utils;//身份证工具类 public clas ...

  5. java inputtools_Java后台开发常用工具类

    本文涉及的工具类部分是自己编写,另一部分是在项目里收集的.工具类涉及数据库连接.格式转换.文件操作.发送邮件等等.提高开发效率,欢迎收藏与转载. 数据库连接工具类 数据库连接工具类--仅仅获得连接对象 ...

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

    转载自   java验证身份证号码是否有效源代码 1.描述 用java语言判断身份证号码是否有效,地区码.出身年月.校验码等验证算法 2.源代码 package test; import java.t ...

  7. Java版CRC8和CRC16工具类

    搞物联应用,通信时常用CRC校验.下面是Java版的CRC算法工具类,可直接使用. CRC8工具类 public class CRC8Util {static byte[] crc8_tab = {( ...

  8. java 项目中常用的工具类总结

    1.文件 1.根据图片的链接,下载图片 package com.lingxu.module.BigDataJoinMessage.util;import java.io.FileOutputStrea ...

  9. java校验身份证号实例

    这是笔者整理的比较详细的java后端校验身份证号码的测试demo,希望对你有用,哈哈哈~ 不多说,直接上代码,喜欢的多多评论点赞,哈哈哈~ package com.lg.handlers;import ...

  10. Java各种方式加解密工具类

    文章目录 前言 1.AES 2.DES 3.BCrypt 4.Http Basic 5.MD5 6.RSA 7.SHA256 8.SM3 9.SM4 前言 JAVA能够实现各种加解密方式,这里对各种加 ...

最新文章

  1. HttpClient 详解一《C#高级编程(第9版)》
  2. adnroid 打包问题 :compileReleaseJavaWithJavac
  3. 网上找到一个用不同颜色显示表格奇偶行的例子
  4. 【详细讲解】某书店有一个收银员该书店最多允许n个购书者进入。将收银员和购书者看作不同的进程,其工作流程如下图所示。利用PV操作实现该过程,设置信号量S1,S2和Sn,初值分别为0,0,n.则图中a1
  5. Psych101(part4)--Day4
  6. DVS/DVR常见的监控名词
  7. servlet中文乱码处理
  8. 护卫神怎么增加php版本_护卫神php套件 php版本升级方法(php5.5.24)
  9. 转载:GBDT算法梳理
  10. 【LINQ】LINQ 简介
  11. 20210310 20210311 :栈、队列、堆类题目合集
  12. Lourakis/ Levenberg-Marquardt nonlinear least squares algorithms in C/C++
  13. 使用Python抓取google街景照片
  14. 2018药品目录匹配_本位码_众联社本位码匹配工具2018版破解版
  15. 自动驾驶应用加速 模拟仿真技术是关键之一
  16. word 电子签名去背景方法
  17. IT运维的相关需求分析报告(第一篇)
  18. 【mysql】--explain命令解析
  19. 简单的VUE购物车应用
  20. Ubuntu18.04系统硬盘分区方法

热门文章

  1. 最近 火火火 的 GitHub 项目!
  2. 有关Excel表格公式的方式进行前边数字排序,后边内容不变的方法。
  3. 外国内乱时,撤侨不一定是最佳策略
  4. SpringBoot版本升级
  5. 蓝桥杯:国二选手经验贴 附蓝桥杯历年真题
  6. 第68页的gtk+编程例子——选择菜单
  7. ORACLE解决表空间不释放空间
  8. CentOS 5和6的启动流程
  9. Windows 7下IE9升级到IE 11,F12控制台不能使用的解决方法
  10. Linux的sh脚本编写基础知识