今天看到CSDN推送的消息《我用 Python 算出了同事的身份证号码》自己也想用Java写一个!

当然稍稍改一下就能做身份证合法校验!

下面贴代码!

package test;import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Hashtable;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class IdCardUtil {public static void main(String[] args) {// TODO Auto-generated method stubfor(int k=1;k<=12;k++){List<String> list =getDayListOfMonth(k);for(int i=0;i<list.size();i++){/**** idcard=身份证号  这里是我自己写着玩的  在不知道同事的生日情况下  查出正确的身份证号   * * 要想做校验直接用IdCardNumberVerification * * **/  String idcard ="6222011996"+list.get(i)+"2728";if(IdCardNumberVerification(idcard)){System.out.println(idcard);}}System.out.println("============================================");}}/*** 获取当月所有天* @return*/public static List<String> getDayListOfMonth(int mon) {List<String> list = new ArrayList<String>();Calendar time=Calendar.getInstance(); time.clear(); time.set(Calendar.MONTH,mon-1);//Calendar对象默认一月为0            int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数int month = time.get(Calendar.MONTH)+1;//月份for (int i = 1; i <= day; i++) {String months="";String days="";if(month<10){months = "0"+month;}else{months =month+"";}if(i<10){days="0"+i;}else{days=i+"";}String aDate = months+days;list.add(aDate);}return list;}/***身份证验证* @param idStr* @return 校验信息,correct为成功,失败会返回对应的失败原因*/public static boolean IdCardNumberVerification(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 false;}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 false;}//判断出生年月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 false;}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 false;}if (Integer.parseInt(strMonth) > 12 || Integer.parseInt(strMonth) == 0) {return false;}if (Integer.parseInt(strDay) > 31 || Integer.parseInt(strDay) == 0) {return false;}//判断地区码Hashtable h = GetAreaCode();if (h.get(iDCardNo.substring(0, 2)) == null) {return false;}//判断最后一位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 false;}}catch (Exception e){e.printStackTrace();}return true;}/*** 地区代码* @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. kindle显示电池加叹号-kindle长时间不用,屏幕上显示一个电池加叹号的图标,充电后掉电特别快,一晚上又变成电池加叹号怎么办?kindle长时间不用,充电后电池不耐用怎么办?

    问题描述 kindle长时间不用,屏幕上显示一个电池加叹号的图标,充电后掉电特别快,一晚上又变成电池加叹号,kindle长时间不用,充电后电池不耐用.注意,本文章是针对,充电后能用,但掉电特别快,一晚 ...

  2. 查询用户uid和gid_在AIX上标准化用户UID和GID号

    在具有多个AIX系统的环境中,通常在不同系统之间的UID(用户ID)和GID(组ID)编号不一致. 由于多种原因,这可能是有问题的,并且是一个值得解决的问题. 本文介绍了AIX上的UID和GID号以及 ...

  3. java校验身份证的合法性

    一.判断身份证合法性的规则 1.首先先科普一下身份证号码的数字代表什么? 根据[中华人民共和国国家标准GB11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和 ...

  4. java 代码实现身份证合法性校验(全国所有地方)

    很多地方可能都会用到对身份证要进行判断校验的功能,这个是之前在网上看到的,具体的网址都忘了,现在项目完成了,有时间把其整理下,方便自己和大家日后使用!(直接复制粘贴即可) package org.as ...

  5. java身份证工具类,身份证合法性校验,根据身份证获取生日、年龄、性别

    import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; /**  * 身份证号码校验工具 ...

  6. java校验身份证的合法性、根据身份证获取生日等工具类

    文章目录 一.校验15位或者18位身份证的合法性 二.从身份证号中反向获取生日.性别等信息 一.校验15位或者18位身份证的合法性 import java.text.ParseException; i ...

  7. Java校验身份证号工具类

    直接上代码,该util可以校验身份证号,可以获取年龄.性别.出生日期. public class PersonIdCardUtil {/*** 省.直辖市代码表:* 11 : 北京 12 : 天津 1 ...

  8. vue中如何进行身份证合法性校验(身份证18位,包含最后一位数字/字母)

    文章目录 前言 正文 1. 首先,根据实际情况,目前我们使用的身份证由18位构成,包括数字和字母X.那么,在input输入框中就需要限制用户输入的数据类型. 2.其次,查看Element ui 组件库 ...

  9. java校验身份证号实例

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

最新文章

  1. Ubuntu10.04安装Flash插件
  2. python字典遍历的几种方法(for in 用法)
  3. ajxs跨域 php_PHP项目中是如何处理Ajax请求与Ajax跨域的
  4. 吴恩达深度学习 —— 2.9 逻辑回归中的梯度下降法
  5. 面向切面编程AspectJ在Android埋点的实践
  6. IntelliJ IDEA 设置Output (输出窗口)窗口字体大小
  7. 设计模式之---解释器模式
  8. 在nhibernate 1.2 中使用sqlite时应注意sqlite的ado.net的提供者 .
  9. 雷军:程序员如何成功创业?
  10. 【工具使用】SecureCRT的下载、安装图文详细过程介绍
  11. 测量学5_测量误差理论的基本知识
  12. 编译原理 语法分析程序LL(1)和LR(0)实现
  13. 47页数字孪生人脸识别轨迹分析电子围栏智慧工地解决方案
  14. N01web网页设计实例作大作业(div+css) ——中国茶文化(6页) 茶文化网页制作作业_中国化(网页设计...
  15. 一行代码教你七夕情人节如何告白❤—动漫3D相册(音乐+文字)HTML+CSS+JavaScript
  16. 计算机毕业论文致谢信范文,计算机毕业论文致谢
  17. 第七章 马斯洛金字塔模型
  18. 判断字符串是否可由重复子字符串组成
  19. 基于Arduino平台dmp库+匿名四轴上位机测试MPU6050
  20. 日语动词活用之连用形

热门文章

  1. 阿里巴巴-口碑-上海-Java一面部分面试题
  2. 汇川plc可以用C语言吗,汇川小型PLC梯形图编程系列教程(七):数值存储与二进制数据知识详解...
  3. CSpreadSheet类学习,用于操作excel表格。
  4. 【论文阅读】Eclipse Attacks on Bitcoin’s Peer-to-Peer Network
  5. 《财报就像一本故事书》读书笔记(未完待续)
  6. K8s 部署java项目
  7. Google DeepMind的新论文: Spatial Transformer Networks
  8. [转载]informix onbar规复饬令用法
  9. iso12233测试方法_ISO12233分辨率测试卡的使用方法
  10. HarmonyOS+Django登录页面