引用于:http://blog.csdn.net/hhzxj2008/archive/2010/01/10/5171444.aspx
public static boolean validatePersonalId(String personalId) {
if ((personalId == null) || ((personalId.length() != 15) &&
(personalId.length() != 18))) {
return false;
}
int personalIdLength = personalId.length();
String regex = "[1-8]{1}[0-9]{" + (personalIdLength-2) + "}[0-9X]";
Pattern pattern = Pattern.compile(regex);
if (!pattern.matcher(personalId).matches()) {
return false;
}
// 将老身份证转换为新身份证
if (personalIdLength == 15) {
StringBuffer stringBuffer = new StringBuffer(personalId);
stringBuffer.insert(6, "19");
personalId = stringBuffer.toString();
}
// 规则
byte[] poss = { 2, 4, 8, 5, 10, 9, 7, 3, 6, 1, 2, 4, 8, 5, 10, 9, 7 };
char[] possibleLast = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
int last = 0;
int[] pid = new int[18];
for (int i = 1; i < 18; i++){
int j = 17 - i;
pid[i - 1] = Integer.parseInt(personalId.substring(j, j + 1));
}
for (int i = 0; i < 17; i++){
last += poss[i] * pid[i];
}
last = last % 11;
if(possibleLast[last] == personalId.charAt(17)){
return true;
}
return false;
}