Cing
发布于 2021-10-21 / 180 阅读
0

注册号、统一信用代码规则

注册号 GS15-2006

6 位首次登记机关代码 + 8 位顺序码 + 1 位校验码

  • 首次登记机关代码:国家工商总局用 “100000” 表示,其他使用 6 位行政区划代码表示
  • 顺序码:第一位采用如下规则:
    1. 内资各类企业 0,1,2,3
    2. 外资企业 4,5
    3. 个体工商户 6,7,8,9
  • 计算校验码 java 版本
public class RegNumUtil {
    public static int getParityCode(String code) {
        int checkCode;
        int rem = 0;
        char[] chars = code.toCharArray();
        for (char c : chars) {
            rem = (rem + Integer.parseInt(c + "")) % 10;
            if (rem == 0) {
                rem = 10;
            }
            rem = (rem * 2) % 11;
        }
        checkCode = (11 - rem) % 10;
        return checkCode;
    }

    public static String getFullRegNum(String regNum) {
        return regNum + getParityCode(regNum);
    }
}

首次登记机关代码版本:2001 年中华人民共和国行政区划代码(GB/T 2260-2002 被替代 GB/T 2260-2007

社会统一信用代码编码规则 GB 32100-2015

登记管理部门代码 1 位 + 机构类别代码 1 位 + 登记管理机关行政区划码 6 位(GB/T 2260-2007, 2020年中华人民共和国行政区划代码)+ 主体标识码(组织机构代码)9 位(GB 11714-1997) + 校验码 1 位

  • 登记管理部门代码
登记管理部门代码标识
机构编制1
外交2
司法行政3
文化4
民政5
旅游6
宗教7
工会8
工商9
中央军委改革和编制办公室A
农业N
其他Y
  • 机构类别代码
登记管理部门 机构类别 代码标识
机构编制 机关 1
事业单位 2
编办直接管理机构编制的群众团体 3
其他 9
外交 外国常驻新闻机构 1
其他 9
司法行政 律师执业机构 1
公证处 2
基层法律服务所 3
司法鉴定机构 4
仲裁委员会 5
其他 9
文化 外国在华文化中心 1
其他 9
民政 社会团体 1
民办非企业单位 2
基金会 3
其他 9
旅游 外国旅游部门常驻代表机构 1
港澳台地区旅游部门常驻内地(大陆)代表机构 2
其他 9
宗教 宗教活动场所 1
宗教院校 2
其他 9
工会 基层工会 1
其他 9
工商 企业 1
个体工商户 2
农民专业合作社 3
中央军委改革和编制办公室 军队事业单位 1
其他 9
农业 组级集体经济组织 1
村级集体经济组织 2
乡镇级集体经济组织 3
其他 9
其他 1
  • 校验码
  1. 组织机构代码校验码
     public class OrganizationCodeUtil {
     
         private static final int[] WEIGHT = {3, 7, 9, 10, 5, 8, 4, 2};
         private static final char[] BASE_CODE_ARRAY = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
         private static final Map<Character, Integer> CODE_INDEX_MAP;
     
         static {
             CODE_INDEX_MAP = new HashMap<>();
             for (int i = 0; i < BASE_CODE_ARRAY.length; i++) {
                 CODE_INDEX_MAP.put(BASE_CODE_ARRAY[i], i);
             }
         }
     
         /**
          * 计算全国组织机构代码校验码 GB 11714-1997
          *
          * @param organizationCode 组织机构代码
          * @return 校验符
          */
         public static char getParityCode(CharSequence organizationCode) {
             int sum = 0;
             int codeIndex;
             for (int i = 0; i < 8; i++) {
                 codeIndex = CODE_INDEX_MAP.get(organizationCode.charAt(i));
                 sum += codeIndex * WEIGHT[i];
             }
             int result = 11 - sum % 11;
             switch (result) {
                 case 10:
                     return 'X';
                 case 11:
                     return '0';
                 default:
                     return BASE_CODE_ARRAY[result];
             }
         }
     }
  1. 统一社会信用代码校验码
     public class CreditCodeUtil {
     
         private static final int[] WEIGHT = {1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28};
         private static final char[] BASE_CODE_ARRAY = "0123456789ABCDEFGHJKLMNPQRTUWXY".toCharArray();
         private static final Map<Character, Integer> CODE_INDEX_MAP;
     
         static {
             CODE_INDEX_MAP = new HashMap<>();
             for (int i = 0; i < BASE_CODE_ARRAY.length; i++) {
                 CODE_INDEX_MAP.put(BASE_CODE_ARRAY[i], i);
             }
         }
     
         /**
          * 获取校验码 GB 32100-2015
          *
          * @param creditCode 统一社会信息代码
          * @return 获取较验位的值
          */
         public static char getParityBit(CharSequence creditCode) {
             int sum = 0;
             Integer codeIndex;
             for (int i = 0; i < 17; i++) {
                 codeIndex = CODE_INDEX_MAP.get(creditCode.charAt(i));
                 sum += codeIndex * WEIGHT[i];
             }
             int result = 31 - sum % 31;
             switch (result) {
                 case 30:
                     return 'Y';
                 case 31:
                     return '0';
                 default:
                     return BASE_CODE_ARRAY[result];
             }
         }
     
         /**
          * 根据统一信用代码前 16 位获得 2 位校验码
          *
          * @param creditCode 统一信用代码前 16 位
          * @return 完整统一信用代码
          */
         public static String getFullCreditCode(String creditCode) {
             String organizationCode = creditCode.substring(8, 16);
             char firstCode = OrganizationCodeUtil.getParityCode(organizationCode);
             creditCode = creditCode + firstCode;
             char secondCode = getParityBit(creditCode);
             return creditCode + secondCode;
         }
     }