The Calibration of Unified Social Credit Code

the rules for the generation of unified social codes are formulated according to the national standard GB32100-2015 "coding rules for uniform Social Credit codes of legal Persons and other organizations".

Let"s start with a piece of code:

    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(); iPP) {
            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; iPP) {
            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);

from the point of view of the code, it should meet the national standards. In the process of practical application, it is found that there are many unsatisfactory situations. At present, it is mainly found that there are many unsatisfied situations in Fujian, for example: 91350211M0000XUF46, 9131000063159284XQ, etc.

do you have this kind of check?

Mar.19,2021

91350100M0001TGQXM also fails to pass


91350628M0000K0H44. This is the number that can be issued. It seems that I am not the only one. There is a standardized verification method, but the means have not kept up, resulting in self-contradictory results. It is simply embarrassing.

MySQL Query : SELECT * FROM `codeshelper`.`v9_news` WHERE status=99 AND catid='6' ORDER BY rand() LIMIT 5
MySQL Error : Disk full (/tmp/#sql-temptable-64f5-1b40944-2c52f.MAI); waiting for someone to free some space... (errno: 28 "No space left on device")
MySQL Errno : 1021
Message : Disk full (/tmp/#sql-temptable-64f5-1b40944-2c52f.MAI); waiting for someone to free some space... (errno: 28 "No space left on device")
Need Help?