旅游电子商务中,预订酒店或订购门票时会以身份证作为消费凭证,为了防止客户误填身份证带来不必要麻烦,需要验证码格式及合法性,代码如下:

   /**
* 判断身份证格式
*
* @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验证身份证格式及合法性的更多相关文章

  1. PHP验证身份证格式

    互联网公司对身份证验证的需求越来越多,然而普通的小公司是无法对接公安部门的身份认证系统的.几乎都是在网上买一些大的互联网公司的一些认证服务.即使是便宜一些的认证价格也达到了10万次/万元.也就是一角钱 ...

  2. JAVA验证身份证号码是否合法

    package com.chauvet.utils; import java.text.ParseException; import java.text.SimpleDateFormat; impor ...

  3. Java验证身份证是否合法

    import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.GregorianCalendar; im ...

  4. JAVA验证身份证号码是否正确

    package com.IdCard; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.D ...

  5. Java进行身份证格式强校验(准)

    最近做了一个系统,涉及到对用户输入的身份证号进行校验,减少脏数据传入后台处理并降低企业验证成本,因此在接入层便对输入信息做格式强校验. 直接附上代码,可直接使用. package hope.ident ...

  6. java验证身份证号码是否有效源代码 wn25的头像 wn25 23 2015-01-04 20:09 6 基本信息 Java × 1 浏览

    原文:http://www.open-open.com/code/view/1420373343171 1.描述 用java语言判断身份证号码是否有效,地区码.出身年月.校验码等验证算法 2.源代码 ...

  7. java验证身份证号码是否有效源代码

    原文:http://www.open-open.com/code/view/1420373343171 1.描述 用java语言判断身份证号码是否有效,地区码.出身年月.校验码等验证算法 2.源代码 ...

  8. js验证身份证格式

    (function(){ Validate={ data:{ // 加权因子 Wi : [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ...

  9. java验证身份证合理性

    package com.tiantian.util; import java.util.Calendar;import java.util.HashMap;import java.util.Map;i ...

随机推荐

  1. LeetCode题解之Clone Graph

    1.题目描述 2.问题分析 要遍历图,然后标记没有被复制的节点. 3.代码 class Solution { private: unordered_map<Node*, Node*> m; ...

  2. Scala实现树形结构

    package graphx import java.util.ArrayList import java.util.List /** * Created by zhen on 2018/12/28. ...

  3. linux c 开发通用结构,框架

    转自:http://www.maomao365.com/?p=673 了解其它语言的框架例:java Struts1.Struts2.Hibernate.Mybatis.Ibatis.Spring 等 ...

  4. SQLServer基础之数据页类型:GAM,SGAM,PFS

    简介 我们已经知道SQL Server IO最小的单位是页,连续的8个页是一个区.SQL Server需要一种方式来知道其所管辖的数据库中的空间使用情况,这就是GAM页和SGAM页. GAM页 GAM ...

  5. 【底层原理】深入理解Cache (上)

    存储器是分层次的,离CPU越近的存储器,速度越快,每字节的成本越高,同时容量也因此越小.寄存器速度最快,离CPU最近,成本最高,所以个数容量有限,其次是高速缓存(缓存也是分级,有L1,L2等缓存),再 ...

  6. iOS开发创建UI的耗时操作处理

    项目中有网络请求.读写操作等一系列耗时操作时,为了避免阻塞主线程,我们会把这些耗时操作放到子线程中去处理,当处理完成后,再回到主线程更新UI,这样就不会阻塞主线程.但是创建UI的时候一般都是在主线程中 ...

  7. Linux下memcache编译安装与基本使用

    memcache是一套分布式的高速缓存系统,特点为key-value 存储 一.在 linux 编译安装memcache.redis等,需要 gcc,make,cmake,autoconf,libto ...

  8. SSH 和 Git

    了解SSH SSH 以非对称加密实现身份验证.较常用的非对称加密有 RSA. 两种加密过程: 1.通过用户名密码访问服务器,即使传输的数据是加密的也可能会被劫持到不信任的服务器,泄露用户名和密码. 2 ...

  9. mybatis : ERROR. token : COMMA, pos : 373

    查询的字段符号问题,可能是多了" , "  也可能是少了 " , "  仔细检查, 都能解决

  10. PAT乙级题:1003我要通过!

    #include <iostream> #include <string> #include <vector> #include <algorithm> ...