身份证号15 18位转换
1 import java.util.regex.*; 2 /** 3 * 中国大陆的身份证检验算法,以及15位和18位身份证的相互转换。 4 * @author hutz 5 * 6 */ 7 public class IdCardUtil { 8 9 public IdCardUtil(){ 10 11 } 12 13 /** 14 * 15位身份证号码转化为18位的身份证。如果是18位的身份证则直接返回,不作任何变化。 15 * @param idCard,15位的有效身份证号码 16 * @return idCard18 返回18位的有效身份证 17 */ 18 public String IdCard15to18(String idCard){ 19 idCard = idCard.trim(); 20 StringBuffer idCard18 = new StringBuffer(idCard); 21 //加权因子 22 //int[] weight = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; 23 //校验码值 24 char[] checkBit = {'1','0','X','9','8','7','6','5','4','3','2'}; 25 int sum = 0; 26 //15位的身份证 27 if(idCard != null && idCard.length()==15){ 28 idCard18.insert(6, "19"); 29 for(int index=0;index<idCard18.length();index++){ 30 char c = idCard18.charAt(index); 31 int ai = Integer.parseInt(new Character(c).toString()); 32 //sum = sum+ai*weight[index]; 33 //加权因子的算法 34 int Wi = ((int)Math.pow(2, idCard18.length()-index))%11; 35 sum = sum+ai*Wi; 36 } 37 int indexOfCheckBit = sum%11; //取模 38 idCard18.append(checkBit[indexOfCheckBit]); 39 } 40 41 return idCard18.toString(); 42 } 43 44 /** 45 * 转化18位身份证位15位身份证。如果输入的是15位的身份证则不做任何转化,直接返回。 46 * @param idCard 18位身份证号码 47 * @return idCard15 48 */ 49 public String IdCard18to15(String idCard){ 50 idCard = idCard.trim(); 51 StringBuffer idCard15 = new StringBuffer(idCard); 52 if(idCard!=null && idCard.length()==18){ 53 idCard15.delete(17, 18); 54 idCard15.delete(6, 8); 55 } 56 return idCard15.toString(); 57 58 } 59 60 61 /** 62 * 校验是否是一个有效的身份证。如果是18的身份证,则校验18位的身份证。15位的身份证不校验,也无法校验 63 * @param idCart 64 * @return 65 */ 66 public boolean checkIDCard(String idCard){ 67 boolean isIDCard = false; 68 Pattern pattern = Pattern.compile("\\d{15}|\\d{17}[x,X,0-9]"); 69 Matcher matcher = pattern.matcher(idCard); 70 if(matcher.matches()){//可能是一个身份证 71 isIDCard = true; 72 if(idCard.length()==18){//如果是18的身份证,则校验18位的身份证。15位的身份证暂不校验 73 String IdCard15 = IdCard18to15(idCard); 74 String IdCard18 = IdCard15to18(IdCard15); 75 if(!idCard.equals(IdCard18)){ 76 isIDCard = false; 77 } 78 }else if(idCard.length()==15){ 79 isIDCard = true; 80 }else{ 81 isIDCard = false; 82 } 83 } 84 85 return isIDCard; 86 } 87 88 }
posted on 2013-06-14 11:10 lylyalong 阅读(1059) 评论(0) 编辑 收藏 举报