需要引入的包:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

常量:

    // 保存每个月的天数private static final int[] DAYS_OF_MONTH = {31, 28, 31, 30, 31, 30, 31,31, 30, 31, 30, 31};// 日历的起始年份public static final int START_YEAR = 1900;// 日历的结束年份public static final int END_YEAR = 2100;

主方法:

 /*** 验证 是否为省份证号 详细验证  验证月份 日期等  要素** @param cardStr* @return*/public static boolean isValidIdCard(String cardStr) {boolean flag = false;Pattern pEighteen = Pattern.compile("^\\d{17}(\\d{1}|x)$");// 18位身份证号码// 包括末尾是“x”的校验码Pattern pFifteen = Pattern.compile("^\\d{15}$");// 15位身份证号码if (cardStr != null) {if (pEighteen.matcher(cardStr).matches()) // 18位身份证号码验证通过{if (isValidDate(cardStr.substring(6, 14)))// 18位身份证号码// 出生年月日验证通过{flag = true;}}if (pFifteen.matcher(cardStr).matches()) // 15位身份证号码验证通过{if (isValidDay(cardStr.substring(6, 12))) // 15位身份证出身年月日的验证{flag = true;}}}return flag;}
 /*** 检查天数是否在有效的范围内* 因为天数会根据年份和月份的不同而不同 所以必须依赖年份和月份进行检查** @param year* @param month* @param day* @return*/public static boolean isValidDay(int year, int month, int day) {if (month == 2 && isLeapYear(year))// 闰年且是2月份{return day >= 1 && day <= 29;}return day >= 1 && day <= DAYS_OF_MONTH[month - 1];// 其他月份}
 /*** 判断是否是闰年** @param year* @return*/public static boolean isLeapYear(int year) {return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;}
 /*** 匹配日期格式 yyyyMMdd 并验证日期是否合法** @param date* @return*/public static boolean isValidDate(String date) {// 1、 \\d{4} 年,\\d{2}月,\\d{2}日匹配Pattern p = Pattern.compile("^\\d{4}\\d{2}\\d{2}$");Matcher match = p.matcher(date);if (date != null) {if (match.matches()) // 格式验证通过 yyyyMMdd{int year = Integer.parseInt(date.substring(0, 4)); // 年int month = Integer.parseInt(date.substring(4, 6)); // 月int day = Integer.parseInt(date.substring(6, 8)); // 日if (!isValidYear((year))) {return false; // 年份不在有效年份中}if (!isValidMonth(month)) {return false; // 月份不合法}if (!isValidDay(year, month, day)) {return false; // 日期不合法}return true;}return false;} else {return false;}}
 /*** 检查year是否在有效的年份范围内 此处验证大于1900年 小于2101年** @param year* @return*/public static boolean isValidYear(int year) {return year >= START_YEAR && year <= END_YEAR;}
  /*** 验证月份是否在有效月份内** @param month* @return*/public static boolean isValidMonth(int month) {return month >= 1 && month <= 12;}
/*** 并验证日期是否合法 此方法忽略了闰年的验证 用于15位身份证出生日期的验证** @param dayStr* @return*/public static boolean isValidDay(String dayStr) {Pattern p = Pattern.compile("^\\d{2}\\d{2}\\d{2}$");Matcher match = p.matcher(dayStr);if (dayStr != null) {if (match.matches()) // 格式验证通过 yyMMdd{int month = Integer.parseInt(dayStr.substring(2, 4)); // 月int day = Integer.parseInt(dayStr.substring(4, 6)); // 日if (!isValidMonth(month)) {return false; // 月份不合法}if (!(day >= 1 && day <= DAYS_OF_MONTH[month - 1])) {return false; // 日期不合法}return true;}return false;} else {return false;}}

如有疑问也可加QQ咨询2502499681 ,烦请备注原因!

java 验证是否为省份证号 详细验证 验证月份 日期等 要素相关推荐

  1. js截取字符串的后几位数 省份证号*隐藏

    js截取字符串的后几位数 代码如下: var str="abcdefghhhh";//截取后4位 str.substring(str.length-4): js  *  代替 va ...

  2. 根据省份证号前6位数字生成的三级联动下拉菜单

    <Script language="JavaScript"> // 定义一级数组 var D0=new Array('("北京市","11 ...

  3. JAVA、PHP统一社会信用代码、身份证号算法解析验证

    JAVA.PHP统一社会信用代码.身份证号算法解析验证 这是给某机关单位写系统的时候要验证统一社会信用代码用的是PHP写的方法 java的话也是同理有时间我再把java代码贴出来,这就先贴PHP JA ...

  4. 验证6种信用卡卡号的代码

    验证6种信用卡卡号的代码 作者:BEUS 日期:2006-08-25 字体大小: 小 中 大 可以验证的信用卡种类有: V - Visa M - MasterCard           A - Am ...

  5. java微信公众号开发token验证失败的问题及解决办法

    java微信公众号开发token验证失败的问题及解决办法 参考文章: (1)java微信公众号开发token验证失败的问题及解决办法 (2)https://www.cnblogs.com/beardu ...

  6. Java黑皮书课后题第6章:**6.31(金融应用:信用卡号的合法性验证)和**6.32 编写程序,提示用户输入一个long型整数的信用卡号码,显示这个数字是合法的还是非法的

    6.31(金融应用:信用卡号的合法性验证)编写程序,提示用户输入一个long型整数的信用卡号码,显示这个数字是合法的还是非法的 6.31题目 题目描述 破题 6.31代码 6.32 代码 运行实例 6 ...

  7. java ladp用户认证_java – LDAP:如何使用连接详细信息验证用户身份

    我无法使用LDAP对用户进行身份验证.我有以下细节: URL=ldap://10.10.10.10:389 LDAP BASE:DC=lab2,DC=ins LDAP Bind Account: CN ...

  8. Java的自动装箱与拆箱详细分析

    Java的自动装箱与拆箱详细分析 1. 既然说是装箱与拆箱,那么到底是装的什么,拆的什么? 装箱:将基本数据类型封装起来,用他对应的引用类(包装类)来处理 拆箱:就是把引用类里面的基本数据拆出来 2. ...

  9. Python:pmml格式文件的简介、安装、使用方法(利用python将机器学习模型转为Java常用的pmml格式文件)之详细攻略

    Python:pmml格式文件的简介.安装.使用方法(利用python将机器学习模型转为Java常用的pmml格式文件)之详细攻略 目录 pmml格式文件的简介 1.PMML结构 pmml安装 pmm ...

  10. Java 7 Update 21安全改进的详细信息

    甲骨文昨天发布了三个Java更新 . 重要的是要注意它们包含一些与安全性相关的更改. 一段时间以来,已经宣布了其中的大多数更改,并且首先要注意的是Oracle按计划交付. 甲骨文公司Java平台安全经 ...

最新文章

  1. php模拟post上传图片,php模拟post上传图片解决方法
  2. 海王必备,我用python写了一个微信机器人和她聊天之后把我拉黑了
  3. 重新定位开放策略 保卫中国经济版图
  4. excel求期望_商务数据分析考试:决策树分析(Excel)-安聪
  5. JVM实用参数(四)内存调优
  6. pandas基础(part1)--Series
  7. S4 extension field的异步创建和后台作业
  8. linux svn cleanup 用法,SVN命令之清理命令(clean up)的功能及使用技巧
  9. 进程 线程 多进程 多线程 父进程 子进程
  10. MCSE2003学习之八
  11. Linux虚拟化KVM-Qemu分析(八)之virtio初探
  12. 域名备案方法及是否需要备案
  13. SATA 3.3协议 Error handing机制
  14. Follow My Heart Of Jan.Feb.Mar. 2023
  15. 计算机系统的四种启动方式是,详解电脑为何有四种不同的启动设备教程
  16. python 路径格式化_吐血整理!140种Python标准库、第三方库和外部工具都有了!...
  17. 这4款数据自动化探索 Python 神器,解决99%的数据分析问题!
  18. 蓝牙解码格式哪个最好_让有源音箱飞起来,让汽车音响硬起来,飞傲BTR5蓝牙HiFi解码品评...
  19. 一个强大而简单的 Python Web框架:web.py
  20. 电脑计算机怎么用键盘计算,电脑计算器还能这么用?

热门文章

  1. Linux的进程调度算法简介
  2. 【元胞自动机】基于元胞自动机模拟和改进遗传算法的动态网络分配模型分析matlab仿真
  3. UTM投影分带相关资料及计算公式
  4. Java中native方法的使用
  5. Git以及Git小乌龟的安装使用
  6. 三维球体史密斯圆图的发展与理解,史密斯圆图的最新发展
  7. Spring常用注解。
  8. 百战程序员怎么样?python介绍和了解python是什么
  9. 将 SPSS 分析技术应用于大数据
  10. PHP+Mysql高并发解决方案