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 = 0;int month = 0;int day = 0;if (idNum.length() == 15) {// 一代身份证
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("19" + birthDateMather.group(1));month = Integer.valueOf(birthDateMather.group(2));day = Integer.valueOf(birthDateMather.group(3));}} else if (idNum.length() == 18) {// 二代身份证
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(1));month = Integer.valueOf(birthDateMather.group(2));day = Integer.valueOf(birthDateMather.group(3));}}// 年份判断,100年前至今
Calendar cal = Calendar.getInstance();// 当前年份int currentYear = cal.get(Calendar.YEAR);if (year <= currentYear - 100 || year > currentYear)return false;// 月份判断if (month < 1 || month > 12)return false;// 日期判断// 计算月份天数int dayCount = 31;switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:case 12:dayCount = 31;break;case 2:// 2月份判断是否为闰年if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {dayCount = 29;break;} else {dayCount = 28;break;}case 4:case 6:case 9:case 11:dayCount = 30;break;}System.out.println(String.format("生日:%d年%d月%d日", year, month, day));System.out.println(month + "月份有:" + dayCount + "");if (day < 1 || day > dayCount)return false;return true;}

 

转载于:https://www.cnblogs.com/tonymu/p/5431841.html


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部