用统一社会信用代码直接查询登记机构
第一个工具类(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