JAVA验证身份证格式及合法性
旅游电子商务中,预订酒店或订购门票时会以身份证作为消费凭证,为了防止客户误填身份证带来不必要麻烦,需要验证码格式及合法性,代码如下:
/**
* 判断身份证格式
*
* @param idNum
* @return
*/
public static boolean isIdNum(String idNum) { // 中国公民身份证格式:长度为15或18位,最后一位可以为字母
Pattern idNumPattern = Pattern.compile("(\\d{14}[0-9a-zA-Z])|(\\d{17}[0-9a-zA-Z])"); // 格式验证
if (!idNumPattern.matcher(idNum).matches())
return false; // 合法性验证 int year = ;
int month = ;
int day = ; if (idNum.length() == ) { // 一代身份证 System.out.println("一代身份证:" + idNum); // 提取身份证上的前6位以及出生年月日
Pattern birthDatePattern = Pattern.compile("\\d{6}(\\d{2})(\\d{2})(\\d{2}).*"); Matcher birthDateMather = birthDatePattern.matcher(idNum); if (birthDateMather.find()) { year = Integer.valueOf("" + birthDateMather.group());
month = Integer.valueOf(birthDateMather.group());
day = Integer.valueOf(birthDateMather.group()); } } else if (idNum.length() == ) { // 二代身份证 System.out.println("二代身份证:" + idNum); // 提取身份证上的前6位以及出生年月日
Pattern birthDatePattern = Pattern.compile("\\d{6}(\\d{4})(\\d{2})(\\d{2}).*"); Matcher birthDateMather = birthDatePattern.matcher(idNum); if (birthDateMather.find()) { year = Integer.valueOf(birthDateMather.group());
month = Integer.valueOf(birthDateMather.group());
day = Integer.valueOf(birthDateMather.group());
} } // 年份判断,100年前至今 Calendar cal = Calendar.getInstance(); // 当前年份
int currentYear = cal.get(Calendar.YEAR); if (year <= currentYear - || year > currentYear)
return false; // 月份判断
if (month < || month > )
return false; // 日期判断 // 计算月份天数 int dayCount = ; switch (month) {
case :
case :
case :
case :
case :
case :
case :
dayCount = ;
break;
case :
// 2月份判断是否为闰年
if ((year % == && year % != ) || (year % == )) {
dayCount = ;
break;
} else {
dayCount = ;
break;
}
case :
case :
case :
case :
dayCount = ;
break;
} System.out.println(String.format("生日:%d年%d月%d日", year, month, day)); System.out.println(month + "月份有:" + dayCount + "天"); if (day < || day > dayCount)
return false; return true;
}
JAVA验证身份证格式及合法性的更多相关文章
- PHP验证身份证格式
互联网公司对身份证验证的需求越来越多,然而普通的小公司是无法对接公安部门的身份认证系统的.几乎都是在网上买一些大的互联网公司的一些认证服务.即使是便宜一些的认证价格也达到了10万次/万元.也就是一角钱 ...
- JAVA验证身份证号码是否合法
package com.chauvet.utils; import java.text.ParseException; import java.text.SimpleDateFormat; impor ...
- Java验证身份证是否合法
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.GregorianCalendar; im ...
- JAVA验证身份证号码是否正确
package com.IdCard; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.D ...
- Java进行身份证格式强校验(准)
最近做了一个系统,涉及到对用户输入的身份证号进行校验,减少脏数据传入后台处理并降低企业验证成本,因此在接入层便对输入信息做格式强校验. 直接附上代码,可直接使用. package hope.ident ...
- java验证身份证号码是否有效源代码 wn25的头像 wn25 23 2015-01-04 20:09 6 基本信息 Java × 1 浏览
原文:http://www.open-open.com/code/view/1420373343171 1.描述 用java语言判断身份证号码是否有效,地区码.出身年月.校验码等验证算法 2.源代码 ...
- java验证身份证号码是否有效源代码
原文:http://www.open-open.com/code/view/1420373343171 1.描述 用java语言判断身份证号码是否有效,地区码.出身年月.校验码等验证算法 2.源代码 ...
- js验证身份证格式
(function(){ Validate={ data:{ // 加权因子 Wi : [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ...
- java验证身份证合理性
package com.tiantian.util; import java.util.Calendar;import java.util.HashMap;import java.util.Map;i ...
随机推荐
- mssql sql server 其它系统函数 parsename 点语法字符串分割函数应用简介
转自:http://www.maomao365.com/?p=4534 一. parsename函数功能简介 parsename函数的主要功能是:可以快速的使用”.”关键字分解字符串,并返回.分解后指 ...
- 第二章 基础查询 2-1 SQL语句基础
一.列的查询 基本的SELECT语句: SELECT <列名 >,...... FROM < 表名>; 注:子句是SQL的组成要素. 注:查询结果中的列的顺序和SELECT子句 ...
- 洗礼灵魂,修炼python(80)--全栈项目实战篇(8)—— 计算器
用正则表达式开发一个计算器,计算用户给定的一串带有加减乘除的公式. 要求:不能使用eval转换字符串 分析: 要求简单,就是计算混合运算,但是不能使用eval直接转换,主要就是把整个式子中的小括号优先 ...
- SQL SERVER数据库级的触发器
CREATE TRIGGER [Object_Change_Trigger_DDL] ON database FOR DROP_TABLE AS DECLARE @EventData AS xml; ...
- windows下安装mysql
windows 下安装mysql 1.先下载好 mysql5.7 版本的安装包,可以去官网自己下载,也可以从我的百度云分享 里面下载: 链接: https://pan.baidu.com/s/1VXk ...
- Python操作字典(dict)
一.字典定义 >>> dict={} 二.字典元素添加 >>> dict['性别']='男' >>> dict {'性别': '男'} >& ...
- Win10 使用笔记
前言 记录我在使用过程的一些笔记,本文所写内容,基于笔者所使用的两款win10操作系统: win10 x64 企业版 (1607) win10 x64 专业版 (1703) Win10 五笔输入法 使 ...
- 一次线上问题引发的对于C#中相等判断的思考
线上报来一个问题,说用户的数据丢失了.开发经过紧张的调查.终于找到了原因. if (newData.GetValue(rowIndex) == oldData.GetValue(rowIndex)) ...
- 【PAT】B1011 A+B 和 C
注意数据的范围,使用long long就行了 #include<stdio.h> int main(){ int N;scanf("%d",&N); for(i ...
- June 7. 2018 Week 23rd Thursday
Half is worse than none at all. 一知半解比一无所知更痛苦. From Westworld. If we go looking for the truth, get th ...