开票、做供应商准入、核对合同抬头时,都会碰到那串 18 位的统一社会信用代码。手抄或 OCR 识别很容易错一两位——而它和普通编号不同,最后一位是按算法算出来的校验码,错一位就能被查出来。
这篇用 NBTools 的统一社会信用代码校验工具讲清楚:18 位分别代表什么、校验码怎么算、以及它能查出什么、查不出什么。代码在浏览器本地校验,不上传服务器。
18 位分段含义
| 位置 | 长度 | 含义 | 工具是否展示 |
|---|---|---|---|
| 第 1 位 | 1 | 登记管理部门代码 | 展示(如"市场监管(工商)"、"民政") |
| 第 2 位 | 1 | 机构类别代码 | 展示(如"企业"、"个体工商户") |
| 第 3–8 位 | 6 | 登记管理机关行政区划码 | 展示这 6 位代码 |
| 第 9–17 位 | 9 | 主体标识号(组织机构代码) | 不单独展示 |
| 第 18 位 | 1 | 校验码 | 用于校验 |
所以看到 91 开头的,第 1 位表示市场监管(工商)、第 2 位表示企业,是国内最常见的企业代码形态。
校验码是怎么算出来的
依据 GB 32100-2015,算法可以概括为三步:
- 映射成数值:代码里每个字符按 31 个字符集
0123456789ABCDEFGHJKLMNPQRTUWXY找到对应序号(0–30)。这个字符集刻意去掉了 I、O、S、V、Z,避免与数字 0/1/2 等混淆。 - 加权求和:前 17 位的序号分别乘以固定权重(权值序列为
1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28,本质是 3 的幂对 31 取模),然后累加。 - 求校验位:用
31 − (总和 mod 31)得到应填的数值;若结果正好是 31,则取 0。再把它对照字符集换成字符,与第 18 位比对。
比对一致即"校验通过",工具同时展示登记管理部门、机构类别与行政区划码;不一致会提示"校验码错误"。
它能查出什么,查不出什么
这一点非常关键,直接决定结果怎么用:
- 能查出:位数不对、含非法字符(如出现了 I/O/S/V/Z)、以及因抄错、漏位、顺序错误导致的校验码不匹配。绝大多数手抄错误都会被抓出来。
- 查不出:代码的真实性。校验通过只说明"这一串符合编码规则",不代表该企业真实存在、处于存续状态,也不代表名称与代码匹配。
本工具纯本地计算、不联网核查,也不会记录你输入的代码。要确认企业主体是否真实存在及其登记信息,请到国家企业信用信息公示系统等官方渠道查询。
典型使用场景
- 开票前自查:把对方给的代码粘进去,先排除抄错、漏位的低级错误,避免发票作废重开。
- 批量录入前预检:从 OCR 或 Excel 里批量复制出来的代码,先过一遍校验,能提前发现识别错误。
- 合同/标书核对:核对盖章处的代码与文本是否一致,减少因笔误导致的返工。
常见问题
校验通过就说明这家企业是真的吗
不是。校验通过只代表这串代码符合 GB 32100 的编码规则与校验算法。工具不联网、不核查真实性。确认主体请到国家企业信用信息公示系统等官方渠道。
提示"格式错误"是什么意思
通常是位数不是 18 位,或包含了字符集之外的字符(代码只含数字与大写字母,且不含 I、O、S、V、Z)。请检查是否把字母 O 误当作数字 0。
提示"校验码错误"一定是抄错了吗
极大概率是某一位抄错、漏位或顺序错位。请逐段与原件核对,尤其注意第 3–8 位行政区划与第 9–17 位主体标识。
行政区划码为什么显示的是数字
工具展示的是代码中的原始 6 位行政区划码(对应 GB/T 2260)。它告诉你登记管理机关所在地,不展开为具体地名。
代码会上传吗
不会。校验完全在浏览器本地完成,统一社会信用代码不上传服务器,也不被记录。
相关工具
- NBTools 统一社会信用代码校验:https://nbtools.cn/tools/credit-code
- 银行卡校验:Luhn 算法校验卡号并识别发卡行
- 身份证校验:校验 18 位身份证格式与校验码
- 格式校验:手机号/邮箱/URL/IP 等常见格式校验