public static boolean TWIDCardValidate(String idCard){
if (StringUtils.isNotBlank(idCard) && idCard.length() == 10) {
idCard = idCard.toUpperCase();
Hashtable<String,Integer> twMap = GetTWAreaCode();
Integer tw = twMap.get(idCard.substring(0, 1));
if (tw == null) {
return false;
}
try {
int sex = Integer.parseInt(idCard.substring(1, 2));
if (sex != 1 && sex != 2) {
return false;
}
int ten = tw / 10 % 10;
int one = tw % 10;
int totalNumber = ten;
totalNumber += one * 9;
totalNumber += sex * 8;
int number = 7;
for (int i = 2; i < 9; i++) {
if (number < 1) {
break;
}
totalNumber += Integer.parseInt(idCard.substring(i, i + 1)) * number;
number --;
}
String totalNumberStr = totalNumber+"";
int lastNumber = 10 - Integer.parseInt((totalNumberStr).substring(totalNumberStr.length() - 1));
lastNumber = lastNumber == 10 ? 0 : lastNumber;
if (lastNumber == Integer.parseInt(idCard.substring(9))) {
return true;
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
return false;
}
private static Hashtable<String, Integer> GetTWAreaCode() {
Hashtable<String, Integer> hashtable = new Hashtable<String, Integer>();
hashtable.put("A", 10);
hashtable.put("B", 11);
hashtable.put("C", 12);
hashtable.put("D", 13);
hashtable.put("E", 14);
hashtable.put("F", 15);
hashtable.put("G", 16);
hashtable.put("H", 17);
hashtable.put("J", 18);
hashtable.put("K", 19);
hashtable.put("L", 20);
hashtable.put("M", 21);
hashtable.put("N", 22);
hashtable.put("P", 23);
hashtable.put("Q", 24);
hashtable.put("R", 25);
hashtable.put("S", 26);
hashtable.put("T", 27);
hashtable.put("U", 28);
hashtable.put("V", 29);
hashtable.put("X", 30);
hashtable.put("Y", 31);
hashtable.put("W", 32);
hashtable.put("Z", 33);
hashtable.put("I", 34);
hashtable.put("O", 35);
return hashtable;
}