JAVA身分証明書番号検査
プロジェクトのために、このような類を書いて、最近事は比較的に多くて、完備しているでしょう、今誕生日と性別を得るだけでokになりました.
/**
* @author: [email protected]
* @createtime: 2010-11-1 10:27:30
* @Description: shida
*/
public class Utils {
/**
* ,
* @param num
* @return String[] string[0] ,string[1]
* , null
*/
public static String[] getDataByNo(String num) {
//
if (num == null || num.trim().equals("")) {
return null;
}
//
int length = num.length();
// 15 18
if (length != 15 && length != 18) {
return null;
}
// 15 , 18
if(length == 15){
num=uptoeighteen(num);
}
//
int count = 0;
// 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
char[] numChar = num.substring(0, 17).toCharArray();
int[] xishu = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
int[] vi = { 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 };
for (int i = 0; i < numChar.length; i++) {
count += (numChar[i] - '0') * xishu[i];
}
//
int temp = count % 11;
//
String yx = (temp == 2 ? "X" : String.valueOf(vi[temp])).toString();
String[] data = new String[2];
if (!yx.equalsIgnoreCase(num.substring(17, 18))) {
return null;
} else {
//
data[0] = num.substring(6, 14);
//
data[1] = num.substring(14, 17);
//
if (Integer.parseInt(data[1]) % 2 == 0) {
data[1] = " ";
} else {
data[1] = " ";
}
}
return data;
}
public static void main(String[] args) {
// , ,
String[] tests = new String[] { "362522740927501",
"110227198001050556", "210124198508162281",
"21031119851130004X", "34052419800101001X" };
for (int i = 0; i < tests.length; i++) {
String[] data = getDataByNo(tests[i]);
if (data == null) {
System.out.println(" ");
} else {
for (int j = 0; j < data.length; j++) {
System.out.println(data[j]);
}
}
System.out.println("=================");
}
}
// 15 18
public static String uptoeighteen(String fifteencardid) {
String eightcardid = fifteencardid.substring(0, 6);
eightcardid = eightcardid + "19";
eightcardid = eightcardid + fifteencardid.substring(6, 15);
eightcardid = eightcardid + getVerify(eightcardid);
return eightcardid;
}
// 18
public static String getVerify(String eightcardid) {
int remaining = 0;
int[] wi = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 };
int[] vi = { 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 };
int[] ai = new int[18];
String returnStr = null;
try {
if (eightcardid.length() == 18) {
eightcardid = eightcardid.substring(0, 17);
}
if (eightcardid.length() == 17) {
int sum = 0;
String k = null;
for (int i = 0; i < 17; i++) {
k = eightcardid.substring(i, i + 1);
ai[i] = Integer.parseInt(k);
k = null;
}
for (int i = 0; i < 17; i++) {
sum = sum + wi[i] * ai[i];
}
remaining = sum % 11;
}
returnStr = remaining == 2 ? "X" : String.valueOf(vi[remaining]);
} catch (Exception ex) {
return null;
} finally {
wi = null;
vi = null;
ai = null;
}
return returnStr;
}
}