根据中华人民共和国国家标准GB32100-2015:法人和其他组织统一社会信用代码编码规则。
统一社会信用代码的构成
社会组织统一社会信用代码是为每个社会组织发放一个唯一的、终身不变的主题标识代码,并以其为载体采集、查询、共享、比对各类主体信用信息,设计为18位。如图:
统一代码的具体赋码规则如下: 第一部分(第1位):登记管理部门代码。暂按国务院序列规则,5表示民政部门。 第二部分(第2位):机构类别代码。“1”表示社会团体、“2”表示民办非企业单位、“3”表示基金会、“9”表示其他。 第三部分(第3-8位):登记管理机关行政区划码,参照GB/T 2260中华人民共和国行政区划代码标准。(登记机关所在地的行政区划)。 第四部分(第9-17位):主体标识码(组织机构代码),其中第17位为主体标识码(组织机构代码)的校验码。第17位校验码算法规则按照《全国组织机构代码编制规则》(国标GB11714—1997)计算。 第五部分(第18位):统一社会信用代码的校验码。第18位校验码算法规则按照《GB -2015 法人及其他组织统一社会信用代码编制规则》计算。 代码字符集对应顺序为:字符0-9对应数字0-9,字母A-Z中去掉I、O、S、V、Z后剩下的20个依次对应数字10-30
JAVA语言实现
package 帮憨憨爹干活
;
public class mainAlgorithm {
public static void main(String
[] args
) {
String test
[]= {"51420000MJH2003604","51420000MJH200408C","52420000MJH233410E",
"51420000MJH200395N","51420000MJH2003791","53420000MJH2448303",
"52420000MJH233402K","52420000MJH2333813","52420000MJH23339XT",
"51420000MJH200387U"};
for(int i
=0;i
<10;i
++)
{
if(checkUSCC(test
[i
]))
System
.out
.println("验证通过");
else
System
.out
.println("验证失败");
}
}
public static boolean checkUSCC(String testUSCC
)
{
if(testUSCC
.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
<=16;index
++)
{
testc
=testUSCC
.charAt(index
);
if(index
==0)
{
if(testc
!='1'&&testc
!='5'&&testc
!='9'&&testc
!='Y')
{
System
.out
.println("统一社会信用代码中登记管理部门代码错误");
return false;
}
}
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(testUSCC
.charAt(17))==tempNum
)
return true;
else
return false;
}
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;
}
}
}
测试所用的统一社会信用代码来自湖北省民政厅官网的公开信息: http://zwfw.hubei.gov.cn:8503/xcms/shzzwebsite/jumpPage/shzz_xzxkgg.jhtml?currentPage=1&djType=1&flagname=XKGG 测试结果: Edit by LukeLiu