import java.text.ParseException;
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;/*** 身份证好码验证*/
public class IDCardUtils {/*** 功能:身份证的有效验证** @param IDStr 身份证号* @return true 有效:false 无效* @throws ParseException*/public static boolean IDCardValidate(String IDStr){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"};String Ai = "";// ================ 号码的长度18位 ================if (IDStr.length() != 18){return false;}// ================ 数字 除最后以为都为数字 ================if (IDStr.length() == 18){Ai = IDStr.substring(0, 17);}if (isNumeric(Ai) == false){//errorInfo = "身份证15位号码都应为数字 ; 18位号码除最后一位外,都应为数字。";return false;}// ================ 出生年月是否有效 ================String strYear = Ai.substring(6, 10);// 年份String strMonth = Ai.substring(10, 12);// 月份String strDay = Ai.substring(12, 14);// 日if (isDate(strYear + "-" + strMonth + "-" + strDay) == false){//          errorInfo = "身份证生日无效。";return false;}GregorianCalendar gc = new GregorianCalendar();SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");try{if ((gc.get(Calendar.YEAR) - Integer.parseInt(strYear)) > 150 || (gc.getTime().getTime() - s.parse(strYear + "-" + strMonth + "-" + strDay).getTime()) < 0){//errorInfo = "身份证生日不在有效范围。";return false;}} catch (NumberFormatException e){e.printStackTrace();} catch (java.text.ParseException e){e.printStackTrace();}if (Integer.parseInt(strMonth) > 12 || Integer.parseInt(strMonth) == 0){//errorInfo = "身份证月份无效";return false;}if (Integer.parseInt(strDay) > 31 || Integer.parseInt(strDay) == 0){//errorInfo = "身份证日期无效";return false;}// ================ 地区码时候有效 ================Hashtable h = GetAreaCode();if (h.get(Ai.substring(0, 2)) == null){//errorInfo = "身份证地区编码错误。";return false;}// ================ 判断最后一位的值 ================int TotalmulAiWi = 0;for (int i = 0; i < 17; i++){TotalmulAiWi = TotalmulAiWi + Integer.parseInt(String.valueOf(Ai.charAt(i))) * Integer.parseInt(Wi[i]);}int modValue = TotalmulAiWi % 11;String strVerifyCode = ValCodeArr[modValue];Ai = Ai + strVerifyCode;if (IDStr.length() == 18){if (Ai.equals(IDStr) == false){//errorInfo = "身份证无效,不是合法的身份证号码";return false;}} else{return true;}//判断是否成年return isAdult(IDStr);}/*** 判断是否成年** @param str* @return*/private static boolean isAdult(String str){if (StringUtils.isEmpty(str) || (15 != str.length() && 18 != str.length())){return false;} else{String birthday = str.substring(6, str.length() - 4);Calendar calendar = Calendar.getInstance();calendar.set(Integer.parseInt(birthday.substring(0, 4)) + 18,Integer.parseInt(birthday.substring(4, 6)) - 1,Integer.parseInt(birthday.substring(6)), 23, 59);long l = System.currentTimeMillis() - calendar.getTimeInMillis();return 0 <= l;}}/*** 功能:设置地区编码** @return Hashtable 对象*/@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;}/*** 功能:判断字符串是否为数字** @param str* @return*/private static boolean isNumeric(String str){Pattern pattern = Pattern.compile("[0-9]*");Matcher isNum = pattern.matcher(str);return isNum.matches();}/*** 功能:判断字符串是否为日期格式** @param strDate* @return*/public static boolean isDate(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);return m.matches();}
}

如果问题请指正

java身份证号码验证是否有效,校验是否成年相关推荐

  1. 新旧身份证合法性验证及相互转换算法(三):Java身份证号码验证及将15位转换18位

    package test; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 身份证号码验证 * */ pub ...

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

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

  3. JAVA 身份证号码有效性验证

    本文转自:http://www.blogjava.net/zeroline/archive/2011/01/03/342227.html </pre><pre name=" ...

  4. java 身份证号码正则表达式校验

    /*** 身份证号码验证*/ public class IdentityUtils {public static boolean isIDNumber(String IDNumber) {if (ID ...

  5. java对台湾同胞身份证号码验证

    package com.yt.eos.common.enumclass;import org.apache.commons.lang3.StringUtils;/*** 台湾同胞身份证号码验证* @a ...

  6. Java 身份证号验证

    二代身份证号码验证 扯淡区: 本博客主要内容是利用Java语言来验证身份证号码是否符合18位的二代身份证号规范. 公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次 ...

  7. Android身份证号码验证

    最近用到身份证号码验证,在网上看了些资料,写了些方法记录下: 文章迁至:Java/Android通用身份证号验证 public class IDCardValidate {public static ...

  8. 15/18位身份证号码验证

    15/18位身份证号码验证 在做身份证验证之前你得明确身份证号的组成. 首先我告诉你,18位身份证号码后面的字母只有"X"这一个.(X是罗马数字的10,用X来代替10,可以保证您的 ...

  9. C#实现身份证号码验证的方法

    本文实例讲述了C#实现身份证号码验证的方法.分享给大家供大家参考.具体实现方法如下: 随着现在互联网的发展,越来越多的注册用户的地方都用到了身份证,那么对于输入的身份证如何验证呢?看下面的代码,其实很 ...

最新文章

  1. matlab 数据集制作,机器学习数据集制作与划分MATLAB实现
  2. c语言停止线程,如何用C语言实现多线程
  3. 微软Java面试题-按照字母排序
  4. 把100减锐城1用计算机怎么算,北师大四年级下册数学
  5. P2354,jzoj3757-[NOI2014]随机数生成器【贪心,暴力】
  6. 第6章 服务模式 Service Interface(服务接口)
  7. Exploring Ionic Lists
  8. Mono 之 单元测试
  9. Python基础语法知识2
  10. Android布局——小米便签编辑界面xml
  11. 一共81个,开源大数据处理工具汇总(上)
  12. 如何在VirtualBox上安装和安装Windows Home Server“ Vail” Beta
  13. DNS有哪两种域名解析方式?简述这两种方式区别和特点。
  14. kubectl logs和docker logs输出日志不同的问题
  15. iOS 更改webView文字颜色丶文字大小丶背景色的方法
  16. 用JSP/Servlet应用开发一个简单的考试报名系统
  17. TSC 标签打印机,使用TSPL指令,前端 jsp 调用打印二维码和文本标签的案例
  18. 区块链在游戏产业掀起狂潮
  19. 使用 Python 实现欧姆定律(Ohm‘s Law)及代码实现
  20. ssm+Vue计算机毕业设计校园舆情监控系统(程序+LW文档)

热门文章

  1. Oracle向mysql进行数据迁移
  2. 挑战30天学完Python:Day4数据类型-字符串str
  3. 服务频繁出现100毫秒的延迟,原因是什么?
  4. 图形识别-基于opencv+java简单程序
  5. 酷我音乐(在线试听)下载方法
  6. CorelDRAW VBA - 在图层上创建一个新的OLE对象 Layer.CreateOLEObject
  7. 在线算命程序 源码 用python语言写的 算命的网络化发展趋势 你怎么理解的?
  8. 2018研电赛 “RT-Thread企业专项奖” 赞助商通告
  9. win7计算机搜索记录,如何在win7中清空电脑的搜索记录?
  10. python词云代码如何增加字数_3分钟教你用python制作一个简单词云