GB 32100-2015 是中国国家标准,规定了法人和其他组织的统一社会信用代码(Unified Social Credit Code, USCCode)的编码规则。该标准确保了各类法人和其他组织在全国范围内具有唯一、统一的身份标识。以下是 GB 32100-2015 编码规则的主要内容:
统一社会信用代码结构
统一社会信用代码由 18 位字符 组成,具体结构如下:
-
第1位:登记管理部门代码
1
:机构编制部门2
:民政部门3
:工商部门4
:其他部门5
:事业单位6
:社会组织7
:企业8
:个体工商户9
:农民专业合作社
-
第2位:机构类别代码
- 根据不同登记管理部门的具体分类,例如:
- 工商部门:
1
表示企业法人,2
表示非企业法人等。
- 工商部门:
- 根据不同登记管理部门的具体分类,例如:
-
第3-8位:登记管理机关行政区划代码
- 使用国家统计局发布的《中华人民共和国行政区划代码》中的六位数字表示。
-
第9-17位:主体标识码(组织机构代码)
- 这是原组织机构代码证上的 9 位数字或字母,用于唯一标识一个组织。
- 字母范围为
[0-9A-HJ-NPQRTUWXY]
,排除了易混淆的字母如I
,O
,S
等。
-
第18位:校验码
- 校验码是根据前 17 位字符计算得出的一个字符,可以是数字或字母
[0-9A-Z]
,用于验证整个代码的正确性。
- 校验码是根据前 17 位字符计算得出的一个字符,可以是数字或字母
示例
假设有一个企业的统一社会信用代码为 91310115MA1H8R7C6D
,其含义如下:
- 第1位:
9
表示企业 - 第2位:
1
表示企业法人 - 第3-8位:
310115
表示上海市浦东新区 - 第9-17位:
MA1H8R7C6
是该企业的主体标识码 - 第18位:
D
是校验码
正则表达式验证
你可以使用以下正则表达式来验证符合 GB 32100-2015 规范的统一社会信用代码:
^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{9}[0-9A-Z]$
解释:
- 前两位
[0-9A-HJ-NPQRTUWXY]{2}
包括登记管理部门代码和机构类别代码。 - 接下来的六位
\d{6}
是登记管理机关行政区划代码。 - 再接下来的九位
[0-9A-HJ-NPQRTUWXY]{9}
是主体标识码。 - 最后一位
[0-9A-Z]
是校验码。
JavaScript 验证示例
在 JavaScript 中,你可以使用以下代码来验证统一社会信用代码:
const regex = /^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{9}[0-9A-Z]$/;
function validateUSCCode(code) {
return regex.test(code);
}
// 示例调用
console.log(validateUSCCode("91310115MA1H8R7C6D")); // true 或 false
根据 GB 32100-2015 标准,第18位校验码的计算方法较为复杂。校验码是通过前17位字符按照特定的加权规则计算得出的。以下是详细的校验码计算步骤:
校验码计算步骤
-
定义加权因子
- 前17位字符的加权因子分别为:
1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28
。
- 前17位字符的加权因子分别为:
-
字符到数字的映射
- 字符
[0-9A-HJ-NPQRTUWXY]
对应的数字值如下:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 A B C D E F G H J K L M N P Q R T U W X Y 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
- 字符
-
计算加权和
- 将前17位字符转换为对应的数字值,然后乘以对应的加权因子,求和。
- 例如,对于代码
91310115MA1H8R7C6D
:9
对应 9,加权因子为 1,贡献值为9 * 1 = 9
1
对应 1,加权因子为 3,贡献值为1 * 3 = 3
3
对应 3,加权因子为 9,贡献值为3 * 9 = 27
1
对应 1,加权因子为 27,贡献值为1 * 27 = 27
0
对应 0,加权因子为 19,贡献值为0 * 19 = 0
1
对应 1,加权因子为 26,贡献值为1 * 26 = 26
1
对应 1,加权因子为 16,贡献值为1 * 16 = 16
5
对应 5,加权因子为 17,贡献值为5 * 17 = 85
M
对应 22,加权因子为 20,贡献值为22 * 20 = 440
A
对应 10,加权因子为 29,贡献值为10 * 29 = 290
1
对应 1,加权因子为 25,贡献值为1 * 25 = 25
H
对应 17,加权因子为 13,贡献值为17 * 13 = 221
8
对应 8,加权因子为 8,贡献值为8 * 8 = 64
R
对应 25,加权因子为 24,贡献值为25 * 24 = 600
7
对应 7,加权因子为 10,贡献值为7 * 10 = 70
C
对应 12,加权因子为 30,贡献值为12 * 30 = 360
6
对应 6,加权因子为 28,贡献值为6 * 28 = 168
- 总和为:
9 + 3 + 27 + 27 + 0 + 26 + 16 + 85 + 440 + 290 + 25 + 221 + 64 + 600 + 70 + 360 + 168 = 2611
-
计算校验码
-
用总和除以 31,取余数。
-
2611 % 31 = 10
-
根据余数找到对应的校验码字符:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 A B C D E F G H J K L M N P Q R T U W X Y 10 11 12 13 14 15 16 17 18 19 20 21 22
-