Java版
public static boolean validateHKCard(String idCard) {
String verifyCode[] = {"1","2","3","4","5","6","7","8","9"};//第九位校验码(除A以外,A单独处理)
// String card = idCard.replaceAll("[\(|\)]", "");//如果输入带括号则取消注释,注释掉下一行
String card = idCard;
int sum = 0;
char[] chars1 = card.substring(0, 1).toUpperCase().toCharArray();
if (card.length() == 9) {
sum = ((int) chars1[0] - 55) * 9
+ ((int) card.substring(1, 2).toUpperCase().toCharArray()[0] - 55) * 8;
card = card.substring(1, 9);
} else {
sum = 324 + ((int) chars1[0] - 55) * 8;
}
String mid = card.substring(1, 7);
String end = card.substring(7, 8);
char[] chars = mid.toCharArray();
int iflag = 7;
for (char c : chars) {
sum = sum + Integer.parseInt(c + "") * iflag;
iflag--;
}
if (end.toUpperCase().equals("A")) {
sum = sum + 10;
} else if(Arrays.asList(verifyCode).contains(end)){
sum = sum + Integer.parseInt(end);
}else {
return false;
}
return sum % 11 == 0;
}
Javascript版
function validateHKCard(id){
var sum = 0;
const verifyCode =[0,1,2,3,4,5,6,7,8,9]
if(id.length == 9){
sum = (id.substr(0,1).toUpperCase().charCodeAt()-55)*9 + (id.substr(1,1).toUpperCase().charCodeAt()-55)*8;
id = id.substr(1,8);
}else if(id.length == 8){
sum = 324 + (id.substr(0,1).toUpperCase().charCodeAt()-55)*8;
}else{
return false;
}
var end = id.substr(7,1);
var iflag = 7;
var i;
for(i = 1;i<=6;i++,iflag--){
sum = sum + parseInt(id.substr(i,1))*iflag;
}
if(end.toUpperCase() == ("A")){
sum = sum + 10;
}else if(verifyCode.includes(parseInt(end))){
sum = sum + parseInt(end);
}else{
return false;
}
return sum % 11 == 0;
}