java 身份证验证
JAVA 验证 身份证
2023-09-14 09:03:39 时间
public class hello {
public static void main(String[] args) {
System.out.println(isIDNumber("xxxxxxxxxxxxx"));
}
public static boolean isIDNumber(String IDNumber) {
if (IDNumber == null || "".equals(IDNumber)) {
return false;
}
// 定义判别用户身份证号的正则表达式(15位或者18位,最后一位可以为字母)
String regularExpression = "(^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$)|" +
"(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}$)";
//假设18位身份证号码:41000119910101123X 410001 19910101 123X
//^开头
//[1-9] 第一位1-9中的一个 4
//\\d{5} 五位数字 10001(前六位省市县地区)
//(18|19|20) 19(现阶段可能取值范围18xx-20xx年)
//\\d{2} 91(年份)
//((0[1-9])|(10|11|12)) 01(月份)
//(([0-2][1-9])|10|20|30|31)01(日期)
//\\d{3} 三位数字 123(第十七位奇数代表男,偶数代表女)
//[0-9Xx] 0123456789Xx其中的一个 X(第十八位为校验值)
//$结尾
//假设15位身份证号码:410001910101123 410001 910101 123
//^开头
//[1-9] 第一位1-9中的一个 4
//\\d{5} 五位数字 10001(前六位省市县地区)
//\\d{2} 91(年份)
//((0[1-9])|(10|11|12)) 01(月份)
//(([0-2][1-9])|10|20|30|31)01(日期)
//\\d{3} 三位数字 123(第十五位奇数代表男,偶数代表女),15位身份证不含X
//$结尾
boolean matches = IDNumber.matches(regularExpression);
//判断第18位校验值
if (matches) {
if (IDNumber.length() == 18) {
try {
char[] charArray = IDNumber.toCharArray();
//前十七位加权因子
int[] idCardWi = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
//这是除以11后,可能产生的11位余数对应的验证码
String[] idCardY = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
int sum = 0;
for (int i = 0; i < idCardWi.length; i++) {
int current = Integer.parseInt(String.valueOf(charArray[i]));
int count = current * idCardWi[i];
sum += count;
}
char idCardLast = charArray[17];
int idCardMod = sum % 11;
if (idCardY[idCardMod].toUpperCase().equals(String.valueOf(idCardLast).toUpperCase())) {
return true;
} else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
return matches;
}
}
转自:https://blog.csdn.net/tyyking/article/details/88778485
有15位和18位,而且里面还有验证后四位的代码.后四位瞎编是过不去的
相关文章
- java除法保留两位小数_JAVA除法保留小数点后两位的两种方法
- java强制删文件夹_Java 删除文件夹 和 文件 集合
- Java 设计模式最佳实践:一、从面向对象到函数式编程
- Java 验证二代身份证号码是否正确
- 【说站】java Count如何计算流中的元素
- 【说站】java实现PDF加密、分割和生成封面图操作
- Java list foreach_java的foreach
- java查找字符的方法_Java字符串查找(3种方法)
- Java变强之路——面向对象篇
- vscode能编写java吗
- JAVA 新提案:努力简化Hello World,让初学者更好地接受 Java !
- Java 实现–时间片轮转 RR 进程调度算法详解编程语言
- java面试题:写代码使得分别出现StackOverflowError和OutOfMemoryError详解编程语言
- java 标准输出与标准错误 out与 err 区别 用法 联系 java中的out与err区别 System.out和System.err的区别 System.out.println和System.err.println的区别 Java重定向System.out和System.err详解编程语言
- Java集合框架详解编程语言
- Java异步MySQL:开启数据处理新时代(java异步mysql)
- java正则表达式详解编程语言
- Java正则表达式验证IP地址
- MySQL数据库开发实践:用 Java 开发中文应用(mysql中文java)
- Linux下查看Java进程的方法(linux查看java进程)
- Java监控MySQL性能:实现数据库运行优化(java监控mysql)
- 失效Java与Redis结合:让失效数据不再过期(redisjava过期)
- 数据库Java查询Oracle数据库:一种快捷、可靠的解决方案(java查询oracle)
- 的应用Java在Oracle数据库中的重要性及应用(java在oracle里)
- 项目Java项目中展现Redis新型性能优势(redis运用在java)
- java线程并发blockingqueue类使用示例