您的位置:首页 > 编程语言 > Java开发

Java: 身份证号码15位18位互转的类

2005-10-10 10:23 375 查看
package cyachina.util;

/**
* Created by IntelliJ IDEA.
* User: Administrator
* Date: 2004-8-13
* Time: 15:37:28
* To change this template use File | Settings | File Templates.
*/
public class IDCardUtil {

/**
*
* @param century 19xx 年用 19,20xx 年用 20
* @param idCardNo15 待转换的 15 位身份证号码
* @return
*/
public static String from15to18(int century, String idCardNo15) {

String centuryStr = "" + century;
if(century <0 || centuryStr.length() != 2)
throw new IllegalArgumentException("世纪数无效!应该是两位的正整数。");
if(!(isIdCardNo(idCardNo15) && idCardNo15.length() == 15))
throw new IllegalArgumentException("旧的身份证号格式不正确!");

int[] weight = new int[] {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1};

// 通过加入世纪码, 变成 17 为的新号码本体.
String newNoBody = idCardNo15.substring(0, 6) + centuryStr + idCardNo15.substring(6);

//下面算最后一位校验码

int checkSum = 0;
for(int i=0; i< 17; i++) {
int ai = Integer.parseInt("" + newNoBody.charAt(i)); // 位于 i 位置的数值
checkSum = checkSum + ai * weight[i];
}

int checkNum = checkSum % 11;
String checkChar = null;

switch(checkNum) {
case 0: checkChar = "1"; break;
case 1: checkChar = "0"; break;
case 2: checkChar = "X"; break;
default: checkChar = "" + (12 - checkNum);
}

return newNoBody + checkChar;

}

public static String from18to15(String idCardNo18) {

if(!(isIdCardNo(idCardNo18) && idCardNo18.length() == 18))
throw new IllegalArgumentException("身份证号参数格式不正确!");

return idCardNo18.substring(0, 6) + idCardNo18.substring(8, 17);
}

/**
* 判断给定的字符串是不是符合身份证号的要求
* @param str
* @return
*/
public static boolean isIdCardNo(String str) {

if(str == null)
return false;

int len = str.length();
if(len != 15 && len != 18)
return false;

for(int i=0; i<len; i++) {
try {
Integer.parseInt("" + str.charAt(i));
}
catch(NumberFormatException e) {
return false;
}
}

return true;
}

public static void main(String[] args) {

System.out.println(from15to18(19, "XXXXXXXXXXXXXXX"));
System.out.println(from18to15("XXXXXXXXXXXXXXXXXX"));
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: