二、Java代码实现规则验证
public class MechanismCode {
/**
* 代码字符集
*/
private static final String MECHANISM_CODE_STRING = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
/**
* 9位组织机构加权因子
*/
private static final int[] factor = {3,7,9,10,5,8,4,2};
/**
* 验证组织机构代码字符长度及格式
*/
private static final String MECHANISM_CODE_REGEX = "[" + MECHANISM_CODE_STRING + "]{9}";
private static final List<Character> MECHANISM_CODES = new ArrayList<>();
private static final char[] MECHANISM_CODE_ARRAY = MECHANISM_CODE_STRING.toCharArray();
static {
for (char c : MECHANISM_CODE_ARRAY) {
MECHANISM_CODES.add(c);
}
}
public static boolean isSearchMechanism(String mechanismCode) {
if (!Pattern.matches(MECHANISM_CODE_REGEX, mechanismCode)) {
return false;
}
char[] socialCreditCodeArray = mechanismCode.toCharArray();
char check = socialCreditCodeArray[8];
int sum = 0;
for (int i = 0; i < 8; i++) {
sum += (MECHANISM_CODES.indexOf(socialCreditCodeArray[i]) * factor[i]);
}
int mods = 11 - sum % 11;
String c = "";
switch (mods) {
case 10:
c = "X";
break;
case 11:
c = "0";
break;
default:
c = mods + "";
}
return String.valueOf(check).equals(c);
}
public static void main(String[] agre) {
System.out.println(isSearchMechanism("013926161"));
}
}