统一社会信用代码校验

按 GB 32100-2015 的 18 位结构解析并复算第 18 位校验码:前 17 位逐位取字符集下标,乘权重序列 1,3,9,27,19,26,16,17,20,29,25,13,8,24,10,30,28 求和,再用 GB/T 17710(ISO 7064)的 MOD 31-1 规则取校验码。默认示例 91350100M000100Y43 校验通过,校验位为 3。字符集 31 个,去掉了易混的 I O S V Z。

91350100M000100Y43 是 GB 32100-2015 附录给出的案例,第 1 位 9 为工商、第 2 位 1 为企业、第 3-8 位 350100 为福建省福州市。

默认示例:91350100M000100Y43。输入框被清空时点「开始校验」会自动填回示例;逐位权重表默认显示 12 行,点「加载更多」展开到第 18 位。

使用方法

  1. 输入框默认已经填好 91350100M000100Y43,这是 GB 32100-2015 附录里的案例。改任意字符立即重算,光标停在输入框里按 Enter 同样触发。
  2. 代码必须是 18 位大写。输入里出现小写字母会被单独指出来(第几位、是什么字符),不会静默转大写蒙混过去。
  3. 结果区第一行给结论:是否通过、算得的校验位、登记管理部门与机构类别;下面七行是 S 的求和过程、取模结果与各位分段。
  4. 工具区下方是 18 行逐位权重表,列出每一位的字符、在字符集里的下标、权重与乘积,默认显示 12 行,点「加载更多」展开余下 6 行。
  5. 点「导出 CSV」把这张逐位表存成带字节序标记的文件;「复制对照表」复制正文里那张登记管理部门与行政区划表,制表符分隔。
  6. 两个示例按钮分别填入附录案例与一个自造的结构演示码。演示码只保证按算法算得通,不代表真有这家企业。
  7. 校验不通过时会写明「前 17 位算得校验码应为某字符,而第 18 位是某字符」,照着改一位就能定位到手抄错在哪。
  8. 本页只做格式与校验位计算,不联网查企业登记信息,也不会把代码上传到任何地方。

这个统一社会信用代码校验工具能解决什么

统一社会信用代码印在营业执照、发票、招标文件与合同上,抄错一位后面整套流程都卡住。统一社会信用代码校验这一页做的就是把 18 位拆开,告诉你它格式上是否自洽、错在哪一位,以及第 1 位与第 2 位分别代表什么部门与机构类别。

第一类是录入与对账。从纸质执照上抄下来的代码,最容易错的是把 0 抄成 O、把 1 抄成 I、把 2 抄成 Z——字符集恰恰把 I O S V Z 五个易混字符去掉了,所以这类错会直接被判为非法字符,并指明是第几位。校验位不符则意味着某一位抄错或顺序错了。

第二类是批量数据清洗。导出的表格里几千条代码,肉眼挑不出哪条不对。把可疑的那几条逐条代进本页,S 与 S % 31 都会算出来,和内部的对账脚本用的是同一套规则,可以逐步核对到具体某一位。

第三类是辨认代码结构。18 位不是随机串:第 1 位是登记管理部门,第 2 位是机构类别,第 3-8 位是行政区划,第 9-17 位是主体标识码(也就是原组织机构代码那 9 位),第 18 位才是校验码。看清分段之后,看到 91 开头、9 开头、Y 开头就能先有个大概判断。

计算原理与变量说明

字符集共 31 个字符:0123456789ABCDEFGHJKLMNPQRTUWXY,即 0 到 9 接 A 到 Y,但跳过 I、O、S、V、Z 五个容易与数字混淆的字符。每一个字符在字符集里的位置就是它参与运算的「下标」,从 0 数起:0 的下标是 0,A 的下标是 10,Y 的下标是 30。

权重是固定 17 项:1,3,9,27,19,26,16,17,20,29,25,13,8,24,10,30,28。它不是简单递增,而是 3 的幂对 31 取模后的序列:30=1、31=3、32=9、33=27、34=81 ≡ 19 (mod 31),后面依此类推。取模保证了权重始终落在 0 到 30 之间。

分段位序含义默认值
登记管理部门第 1 位1 机构编制、2 外交、3 司法行政、4 文化、5 民政、9 工商、Y 其他9 = 工商
机构类别第 2 位以工商为例:1 企业、2 个体工商户、3 农民专业合作社1 = 企业
行政区划第 3-8 位GB/T 2260 的六位数字码,省级两位 + 市级两位 + 县级两位350100
主体标识码第 9-17 位原组织机构代码的 9 位,自带校验位但本页不做二次校验M000100Y4
校验码第 18 位由前 17 位按 MOD 31-1 算出3

为什么是 MOD 31-1 而不是常见的 MOD 11-2。身份证号码用的是 MOD 11-2,校验位可能是罗马数字 X;统一社会信用代码用的是 GB/T 17710(等同 ISO 7064)里的 MOD 31-1,模数是字符集长度 31,校验位一定落在字符集内部,不会出现 X 这种字符集外的字符。两套算法不通用,拿身份证的校验思路套这里会得到错的结论。

具体算式。先求 S = Σ(下标i × 权重i),i 从 1 取到 17;再算 C[(31 - S % 31) % 31],C 就是字符集。外层再对 31 取一次模,是因为当 S % 31 恰好为 0 时,(31 - 0) = 31 已经越界,必须回到 0。默认示例的 S 是 1640,1640 % 31 = 28,(31 - 28) % 31 = 3,字符集第 3 位正是字符 3。

校验通过只说明格式自洽。校验位是对前 17 位的函数,只要前 17 位变了校验位就跟着变。一个凭空编出来的代码同样可以算得通,所以本页的结论只是「格式合法」,不证明这家企业真实存在、也不证明代码已经被登记。

完整示例(数值仅作演示)

默认一组:91350100M000100Y43。前 17 位 91350100M000100Y4 的逐位乘积依次是 9、3、27、135、0、26、0、0、420、0、0、0、8、0、0、900、112,求和得 S = 1640;1640 % 31 = 28;校验码下标 (31 - 28) % 31 = 3,字符集第 3 位是 3,与第 18 位一致,校验通过。

自造一组(结构演示用,非真实企业):91110108MA01ABCD2 算得校验码 H,拼成 91110108MA01ABCD2H;91440300MA5EFGHK7 算得 6,拼成 91440300MA5EFGHK76;91310000MA1K35Q88 算得 T,拼成 91310000MA1K35Q88T。这三个只是按算法推出来的演示码,用来说明「随便一个前 17 位都能算出校验位」,不是任何真实企业的代码。

错码一组:把默认示例的第 18 位改成 4,得到 91350100M000100Y44。前 17 位算出应为 3,第 18 位却是 4,页面会直接指出两者不一致。若把某一位写成小写,例如第 9 位的 M 写成 m,页面会指出第 9 位是小写字母而不是笼统地说「格式错误」。

登记管理部门与行政区划对照表

下表把第 1 位、第 2 位与第 3-8 位的常见取值列出来,逐位权重表看不懂某一位属于哪一段时,可以回来查这张表。「复制对照表」按钮复制的就是这张表。

类别代码含义
登记管理部门(第 1 位)1机构编制
登记管理部门(第 1 位)2外交
登记管理部门(第 1 位)3司法行政
登记管理部门(第 1 位)4文化
登记管理部门(第 1 位)5民政
登记管理部门(第 1 位)9工商
登记管理部门(第 1 位)Y其他
机构类别(第 2 位,以工商 9 为例)1企业
机构类别(第 2 位,以工商 9 为例)2个体工商户
机构类别(第 2 位,以工商 9 为例)3农民专业合作社
行政区划(第 3-8 位)110000北京市
行政区划(第 3-8 位)310000上海市
行政区划(第 3-8 位)330100浙江省杭州市
行政区划(第 3-8 位)350100福建省福州市
行政区划(第 3-8 位)440300广东省深圳市
行政区划(第 3-8 位)510100四川省成都市

行政区划用的是 GB/T 2260 的六位数字码:前两位是省(直辖市、自治区),中间两位是市(地区、自治州),最后两位是县(区、旗)。省会城市的市级段常常是 01,所以 350100 读作福建省福州市本级,具体到某个区会再往下细分一位。

结果边界、舍入与适用说明

常见问题

为什么字符集里没有 I、O、S、V、Z?

这五个大写字母容易与数字混淆:I 像 1、O 像 0、S 像 5、V 像 U 或与 W 混、Z 像 2。字符集去掉它们之后,字符总数从 36 降到 31,模数也就跟着定成 31。

MOD 31-1 和身份证的校验算法一样吗?

不一样。身份证用 MOD 11-2,校验位可能是 X;统一社会信用代码用 GB/T 17710(ISO 7064)的 MOD 31-1,校验位一定落在字符集内。两者的字符集、权重与取模方式都不同。

权重 1,3,9,27,19 是怎么来的?

是 3 的幂对 31 取模:3 的 0 到 4 次方分别是 1、3、9、27、81,81 对 31 取模得 19,之后照此递推,共取 17 项。

校验通过就能说明这家公司存在吗?

不能。校验位只由前 17 位决定,凭空编一组前 17 位也能算出合法的校验位。要确认主体是否真实存续,请到国家企业信用信息公示系统查询。

为什么输入小写字母不自动转大写?

抄错大小写本身就是最常见的录入错误之一。直接指出第几位是小写,比静默转大写更能帮你发现原件与录入不一致。

第 9-17 位是什么,为什么不再校验一次?

那是主体标识码,也就是原组织机构代码的 9 位,它自带一套校验规则。统一社会信用代码的校验只针对第 18 位,本页照此办理,不重复校验。

Y 开头的合法吗?

合法。第 1 位为 Y 表示登记管理部门为「其他」,例如部分境外或非编办管理的机构。字符集里保留了 Y,权重计算与数字开头完全一致。

输入的代码会上传到服务器吗?

不会。解析、求和、取模与导出都在本页完成,没有发起任何网络请求,也不写入浏览器存储,刷新页面即恢复默认示例。

相关工具