import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public static boolean isUnicode(String businessCode) {
if (isBlank(businessCode) || businessCode.length() != 18) {
return false;
}
Pattern pattern = Pattern.compile("^[12359A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$");
Matcher matcher = pattern.matcher(businessCode);
if(!matcher.matches()){
return false;
}
// 不含(I、O、S、V、Z) 等字母
String baseCode = "0123456789ABCDEFGHJKLMNPQRTUWXY";
char[] baseCodeArray = baseCode.toCharArray();
Map<Character, Integer> codes = new HashMap<Character, Integer>();
for (int i = 0; i < baseCode.length(); i++) {
codes.put(baseCodeArray[i], i);
}
char[] businessCodeArray = businessCode.toCharArray();
Character check = businessCodeArray[17];
if (baseCode.indexOf(check) == -1) {
return false;
}
int[] wi = { 1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28 };
int sum = 0;
for (int i = 0; i < 17; i++) {
Character key = businessCodeArray[i];
if (baseCode.indexOf(key) == -1) {
return false;
}
sum += (codes.get(key) * wi[i]);
}
if(sum==0){
return false;
}
int temp = sum%31;
temp = temp==0?31:temp;
int value = 31 - temp;
return value == codes.get(check);
}
public static boolean isBlank(String str) {
int strLen;
if (str == null || (strLen = str.length()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if ((Character.isWhitespace(str.charAt(i)) == false)) {
return false;
}
}
return true;
}