用统一社会信用代码直接查询登记机构(GB2260区域代码数据库sql)

第一个工具类(UnifiedSocialCreditCode)

package org.example.UnifiedSocialCreditCode;

/**
 * 见GB 32100-2015 法人和其他组织统一社会信用代码编码规则.pdf`在这里插入代码片`
 * <p>
 * 社会统一信用代码 18位 阿拉伯数字或大写英文字母(不使用I、O、Z、S、V)组成
 * 第1位 :登记管理部门代码
 * 第2位 :机构类别代码  (医疗卫生机构类别代码)
 * 第3-8位 :登记管理机关行政区划码
 * 第9-17位 : 主体标识码(组织机构代码)
 * 第18位 : 校验码
 */
public class UnifiedSocialCreditCode {

    /**
     * 统一社会信用代码
     */
    private String uscc;

    /**
     * 第1位 登记管理部门代码
     *  1 机构编制 2 外交;3司法行政;4 文化;5 民政;6旅游;7 宗教;8 工会;9 工商;
     *   A中央军委改革和编制办公室;N农业;Y其他。
     */
    private String managementDepartmentCode;

    /**
     * 第2位 机构类别代码
     *      机构编制 1: 机关 1 事业单位 2 中央编办直接管理机构编制的群众团体 3 其他 9
     *      民政 5: 社会团体 1 民办非企业单位 2 基金会 3 其他 9
     *      工商 9: 企业 1 个体工商户 2 农民专业合作社 3
     *      其他 Y: 1
     */
    private String orgType;
    /**
     * 第3位-第8位 登记管理机关 行政区划代码
     *      参照 GB/T 2260 编码
     */
    private String admdvsCode;
    /**
     * 第9位-第17位 主体标识码(组织机构代码)
     *      参照GB 11714
     */
    private String orgCode;

    /**
     * 第18位 校验码
     */
    private String keyCode;

    public UnifiedSocialCreditCode() {
    }

    public UnifiedSocialCreditCode(String uscc) {
        this.uscc = uscc;
    }

    public String getUscc() {
        return uscc;
    }

    public void setUscc(String uscc) {
        this.uscc = uscc;
    }

    public String getManagementDepartmentCode() {
        return managementDepartmentCode;
    }

    public void setManagementDepartmentCode(String managementDepartmentCode) {
        this.managementDepartmentCode = managementDepartmentCode;
    }

    public String getOrgType() {
        return orgType;
    }

    public void setOrgType(String orgType) {
        this.orgType = orgType;
    }

    public String getAdmdvsCode() {
        return admdvsCode;
    }

    public void setAdmdvsCode(String admdvsCode) {
        this.admdvsCode = admdvsCode;
    }

    public String getOrgCode() {
        return orgCode;
    }

    public void setOrgCode(String orgCode) {
        this.orgCode = orgCode;
    }

    public String getKeyCode() {
        return keyCode;
    }

    public void setKeyCode(String keyCode) {
        this.keyCode = keyCode;
    }

}

第二个工具类(UnifiedSocialCreditCode)

package org.example.UnifiedSocialCreditCode;

public class UnifiedSocialCreditCodeMethod {

    /**
     *  根据社会统一信用代码设置
     *  登记管理部门代码、医疗卫生机构类别代码、行政区划码、组织机构代码、校验码
     *  这个类是用来给 UnifiedSocialCreditCode
     */
    public static UnifiedSocialCreditCode setUSCCInfo(String USCC){
        UnifiedSocialCreditCode unifiedSocialCreditCode = new UnifiedSocialCreditCode();

        String managementDepartmentCode = USCC.substring(0,1);  // 第1位 登记管理部门代码
        String orgType = USCC.substring(1).substring(0,1);  // 第2位 机构类别代码
        String admdvsCode = USCC.substring(2).substring(0,6);  // 第3位-第8位 登记管理机关(行政区划代码)
        String orgCode = USCC.substring(8).substring(0,9);  // 第9位-第17位 主体标识码(组织机构代码)
        String keyCode = USCC.substring(17).substring(0,1);  // 第18位 校验码

        unifiedSocialCreditCode.setManagementDepartmentCode(managementDepartmentCode);
        unifiedSocialCreditCode.setOrgType(orgType);
        unifiedSocialCreditCode.setAdmdvsCode(admdvsCode);
        unifiedSocialCreditCode.setOrgCode(orgCode);
        unifiedSocialCreditCode.setKeyCode(keyCode);
        return unifiedSocialCreditCode;
    }

    /**
     * 统一社会信用代码校验
     *  TODO
     *
     * @return true/false
     */
    public static  boolean checkUSCC(String USCC) {
        if (USCC.length() != 18) {
//            System.out.println("统一社会信用代码长度错误");
            return false;
        }
        int Weight[] = {1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28};        //用于存放权值
        int index = 0;       //用于计算当前判断的统一社会信用代码位数
        char testc;          //用于存放当前位的统一社会信用代码
        int tempSum = 0;     //用于存放代码字符和加权因子乘积之和
        int tempNum = 0;
        for (index = 0; index < 17; index++) {
            testc = USCC.charAt(index);

            // 第1位 登记注册类型代码
            if (index == 0) {
                if (testc != '1' && testc != '5' && testc != '9' && testc != 'Y') {
                    System.out.println("统一社会信用代码中登记管理部门代码错误");
                    return false;
                }
            }

            // 第2位 机构类别代码
            if (index == 1) {
                if (testc != '1' && testc != '2' && testc != '3' && testc != '9') {
                    System.out.println("统一社会信用代码中机构类别代码错误");
                    return false;
                }
            }

            tempNum = charToNum(testc);
            if (tempNum != -1) {                               //验证代码中是否有错误字符
                tempSum += Weight[index] * tempNum;
            } else {
                System.out.println("统一社会信用代码中出现错误字符");
                return false;
            }
        }
        tempNum = 31 - tempSum % 31;
        if (tempNum == 31) tempNum = 0;
        if (charToNum(USCC.charAt(17)) == tempNum)    //按照GB/T 17710标准对统一社会信用代码前17位计算校验码,并与第18位校验位进行比对
            return true;
        else
            return false;
    }

    /**
     * 按照GB32100-2015标准代码字符集将用于检验的字符变为相应数字
     * @param c
     * @return  转换完成后对应的数字,若无法找到 字符集中的字符,返回-1
     */
    public static  int charToNum(char c) {
        switch (c) {
            case '0':
                return 0;
            case '1':
                return 1;
            case '2':
                return 2;
            case '3':
                return 3;
            case '4':
                return 4;
            case '5':
                return 5;
            case '6':
                return 6;
            case '7':
                return 7;
            case '8':
                return 8;
            case '9':
                return 9;
            case 'A':
                return 10;
            case 'B':
                return 11;
            case 'C':
                return 12;
            case 'D':
                return 13;
            case 'E':
                return 14;
            case 'F':
                return 15;
            case 'G':
                return 16;
            case 'H':
                return 17;
            case 'J':
                return 18;
            case 'K':
                return 19;
            case 'L':
                return 20;
            case 'M':
                return 21;
            case 'N':
                return 22;
            case 'P':
                return 23;
            case 'Q':
                return 24;
            case 'R':
                return 25;
            case 'T':
                return 26;
            case 'U':
                return 27;
            case 'W':
                return 28;
            case 'X':
                return 29;
            case 'Y':
                return 30;
            default:
                return -1;
        }
    }
}

原文: https://blog.csdn.net/qq_43098690/article/details/124309146

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值