统一社会代码的生成规则是根据国家标准GB32100—2015《法人和其他组织统一社会信用代码编码规则》标准制定的。
先来一段代码:
public static boolean validate18(String bizNo) {
String regex = "^([0-9ABCDEFGHJKLMNPQRTUWXY]{2})([0-9]{6})([0-9ABCDEFGHJKLMNPQRTUWXY]{10})$";
if (!bizNo.matches(regex)) {
return false;
}
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 = bizNo.toCharArray();
Character check = businessCodeArray[17];
if (baseCode.indexOf(check) == -1) {
return false;
}
int[] ws = { 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) * ws[i]);
}
int c18 = 31 - sum % 31;
if (c18 == 31) {
c18 = 0;
}
return c18 == codes.get(check);
从代码上看应该满足国家标准,实际应用过程中发现存在很多不满足的情况,目前主要发现福建很多不满足,比如:91350211M0000XUF46,9131000063159284XQ等
请问各位有没有这类校验?
91350100M0001TGQXM 也校验不通过