JAVA 校验组织机构代码工具类
/** * TODO * 组织机构代码校验工具类 */ public class OrganizationCodeUtil { /* 校验规则: 只能填写数字和字母; 由9位数字或字母组成,第9位是校验码,其计算规则如下: C[9] = 11 – ( ∑( C[i] * W[i] ) mod 11 )。 其中,C[i]表示从左至右第i个位置上的数字或字母的ASC码; W[i]表示第i个位置上的加权因子,其值如下: i 1 2 3 4 5 6 7 8 W[i] 3 7 9 10 5 8 4 2 当C[9]=10时,校验码用X表示; 当C[9]=11时,校验码用0表示; 当C[9]介于0至9之间时,校验码即用C[9]表示。 (3)不允许000000000该特殊代码。 */ public static boolean organizationCodeCheck(String code) { // 9位、不允许000000000该特殊代码 if (code.length() != 9 || "000000000".equals(code)) { return false; } // 只能填写数字和字母 for (int i = 0; i < code.length(); i++) { char c = code.charAt(i); // 字母 if (Character.isLowerCase(c) || Character.isUpperCase(c)) { continue; } // 数字 if (Character.isDigit(c)) { continue; } return false; } boolean flag = false; String[] wis = {"3", "7", "9", "10", "5", "8", "4", "2"}; int weightedVal = 0; for (int i = 0; i < 8; i++) { int ci = getIntByChar(code.charAt(i)); int wi = Integer.parseInt(wis[i]); weightedVal = weightedVal + ci * wi; } int checkCode = 11 - weightedVal % 11; String c9 = String.valueOf(code.charAt(8)); if (checkCode == 10) { if ("X".equals(c9)) { flag = true; } } if (checkCode == 11) { if ("0".equals(c9)) { flag = true; } } if (checkCode > 0 && checkCode <= 9) { if (String.valueOf(checkCode).equals(c9)) { flag = true; } } return flag; } private static int getIntByChar(char val) { // 数字 if (Character.isDigit(val)) { return Integer.parseInt(String.valueOf(val)); } return Integer.valueOf(val); } public static void main(String[] args) { // 761569584\L40160087\319852897\66695787X\753585920\081788820 String code = "081788820"; System.out.println(organizationCodeCheck(code)); } }