前端之家收集整理的这篇文章主要介绍了
用正则表达式验证身份证号码 java,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
import java.text.DateFormat; import java.text.NumberFormat; import java.text.ParseException; import java.util.Date; import java.util.Random; public class Identity { // 位权值数组 private static byte[] Wi=new byte[17]; // 身份证前部分字符数 private static final byte fPart = 6; // 身份证算法求模关键值 private static final byte fMod = 11; // 旧身份证长度 private static final byte oldIDLen = 15; // 新身份证长度 private static final byte newIDLen = 18; // 新身份证年份标志 private static final String yearFlag = "19"; // 校验码串 private static final String CheckCode="10X98765432"; // 最小的行政区划码 private static final int minCode = 150000; // 最大的行政区划码 private static final int maxCode = 700000; // 旧身份证号码 // private String oldIDCard=""; // 新身份证号码 // private String newIDCard=""; // 地区及编码 //private String Area[][2] = private static void setWiBuffer(){ for(int i=0;i <Wi.length;i++){ int k = (int) Math.pow(2,(Wi.length-i)); Wi[i] = (byte)(k % fMod); } } //
获取新身份证的最后一位:检验位 private static String getCheckFlag(String idCard){ int sum = 0; //进行加权求和 for(int i=0; i <17; i++){ sum += Integer.parseInt(idCard.substring(i,i+1)) * Wi[i]; } //取模运算,得到模值 byte iCode = (byte) (sum % fMod); return CheckCode.substring(iCode,iCode+1); } //判断串长度的合法性 private static boolean checkLength(final String idCard,boolean newIDFlag){ boolean right = (idCard.length() == oldIDLen) || (idCard.length() == newIDLen); newIDFlag = false; if(right){ newIDFlag = (idCard.length() == newIDLen); } return right; } //
获取时间串 private static String getIDDate(final String idCard,boolean newIDFlag){ String dateStr = ""; if(newIDFlag) dateStr = idCard.substring(fPart,fPart+8); else dateStr = yearFlag + idCard.substring(fPart,fPart+6); return dateStr; } //判断时间合法性 private static boolean checkDate(final String dateSource){ String dateStr = dateSource.substring(0,4)+"-"+dateSource.substring(4,6)+"-"+dateSource.substring(6,8); System.out.println(dateStr); DateFormat df = DateFormat.getDateInstance(); df.setLenient(false); try { Date date= df.parse(dateStr); return (date!=null); } catch (ParseException e) { // TODO Auto-generated catch block return false; } } //旧身份证转换成新身份证号码 public static String getNewIDCard(final String oldIDCard){ //初始化
方法 Identity.setWiBuffer(); if(!checkIDCard(oldIDCard)){ return oldIDCard; } String newIDCard = oldIDCard.substring(0,fPart); newIDCard += yearFlag; newIDCard += oldIDCard.substring(fPart,oldIDCard.length()); String ch = getCheckFlag(newIDCard); newIDCard += ch; return newIDCard; }
原文链接:https://www.f2er.com/regex/362431.html