号码校验三合一工具
三类中国常用号码放在一起校验:统一社会信用代码(GB 32100 校验位 + 登记部门/机构类别/行政区划解析)、手机号(11 位格式 + 号段对应运营商)、银行卡号(位数 + Luhn + 卡组织)。输入即算,全部在浏览器本地完成。
录入客户资料、核对表单,最怕号码抄错一位——校验位算法就是为「当场发现抄错」设计的。统一社会信用代码、手机号、银行卡号这三类最常见的号码,粘进来立刻判断格式是否成立,还能顺带解析出登记部门、运营商或卡组织;至于号码是否真实存在,那是另一回事,下面有说明。
口径提醒:校验位正确只说明「格式合法、没有抄错位」,不证明号码真实存在(与身份证校验同理);手机号运营商按号段判断,携号转网后号段会失真;银行卡 Luhn 通过不代表卡有效,卡组织按 BIN 段识别。
这个工具解决你的问题了吗?
提交后会把工具名、你的输入与当前结果发送到服务器;请勿填写身份证号、手机号等隐私信息。
AI 助手 会结合你当前的输入与结果回答
追问会再次把当前输入与结果发送到服务器;请勿填写隐私信息。
使用步骤
- 选类型:统一社会信用代码 / 手机号 / 银行卡号。
- 看校验位结果与解析明细(归属、运营商或卡组织)。
- 校验通过 ≠ 号码真实存在,只保证格式与抄写正确。
- 批量核对数据时逐条验证,X 与大小写按提示处理。
计算原理与示例
能校验哪三类号码
本工具把三类号码合并在一处:切换上方「统一社会信用代码 / 手机号 / 银行卡」即可,输入框会自动换成对应类型的示例。三类号码的长度、字符集完全不同,因此不会互相误判;输入中的空格与连字符会自动忽略,方便直接粘贴带分隔符的卡号。
统一社会信用代码的校验位怎么算
统一社会信用代码共 18 位,第 1 位是登记管理部门(1 机构编制、5 民政、9 工商市场监管、Y 其他),第 2 位是机构类别(与第 1 位组合决定,如 91 企业、92 个体工商户、12 事业单位、51 社会团体),第 3~8 位是登记机关行政区划码,第 9~17 位是主体标识码,第 18 位是校验位。校验位算法(GB 32100-2015):使用 31 个字符(数字 0-9 与字母 A-Z 去掉易混的 I、O、S、V、Z),把前 17 位按权重 1、3、9、27、19、26、16、17、20、29、25、13、8、24、10、30、28(即 3 的 i-1 次方对 31 取余)加权求和,再取 (31 − 和 mod 31) mod 31 得到校验字符。例如 91110000802100433B 的加权和余 20,校验字符是 B,与第 18 位一致。
手机号为什么只给运营商、不给归属地
手机号只做两件事:11 位格式校验(1 开头、第二位 3~9),以及用前 3 位号段查运营商(中国移动 / 中国联通 / 中国电信 / 中国广电)。需要说明的是:本工具不提供精确到省市区的归属地——那需要 7 位号段库(数十万条、按月更新),体积与维护成本都远超一个纯本地页面所能承受;而且携号转网普及后,号码当前的运营商与号段表也可能不一致。查询「某个号段属于哪家」是可靠的,查询「这个号码现在是谁的网络」只能作参考。
银行卡号为什么只给卡组织、不给发卡行
银行卡号只做位数、Luhn 校验与卡组织识别:长度取 12~19 位(境内借记卡常见 16~19 位、信用卡常见 16 位),Luhn 按 ISO/IEC 7812 附录 B 的模 10 算法从右往左处理;卡组织按公开 IIN 前缀判定(62 银联、4 Visa、51~55 与 2221~2720 Mastercard、34/37 美国运通、35 JCB)。本工具不显示具体发卡行:那需要一份按月变动的银行 BIN 库,且换卡换行并不改变卡号规则,猜错的代价远大于给出的便利。
计算依据:统一社会信用代码采用 GB 32100-2015(31 字符集、加权因子 3^(i-1) mod 31、校验字符 = (31 − Σ mod 31) mod 31),行政区划码采用 GB/T 2260 省级与常用地级市前缀(县级不收录,未命中显示未收录);手机号段→运营商为依据公开资料整理(2026-09 核对),不含精确归属地;银行卡采用 ISO/IEC 7812 附录 B 的 Luhn 模 10 校验与公开 IIN 前缀规则,不含发卡行 BIN 库。
代码示例
JavaScript Luhn 算法(银行卡)
function luhn(numStr) {
let sum = 0, alt = false;
for (let i = numStr.length - 1; i >= 0; i--) {
let d = +numStr[i];
if (alt) { d *= 2; if (d > 9) d -= 9; }
sum += d; alt = !alt;
}
return sum % 10 === 0;
}
luhn("6222020200112233334"); // true(格式合法)
// 手机号:/^1[3-9]\d{9}$/;信用代码:GB 32100 双字符校验
Python 同算法的 Python 版
def luhn(num_str):
total, alt = 0, False
for ch in reversed(num_str):
d = int(ch)
if alt:
d *= 2
if d > 9: d -= 9
total += d
alt = not alt
return total % 10 == 0
luhn("6222020200112233334") # True
# 手机号:re.match(r"1[3-9]\d{9}", s)
常见问题
统一社会信用代码的校验位是怎么算出来的?
按 GB 32100-2015:把前 17 位字符转成数值(0-9 对应 0-9,A=10、B=11…去掉 I、O、S、V、Z 后依次为 10~30),分别乘上加权因子 1、3、9、27、19、26、16、17、20、29、25、13、8、24、10、30、28 后求和,取 (31 − 和 mod 31) mod 31 得到校验字符。以 91110000802100433B 为例,加权和余 20,31−20=11,第 11 号字符是 B,校验通过。
校验位对了,就说明这个代码是真实登记的吗?
不。校验位只保证「结构合法、没有抄错位」,伪造一个校验位正确的代码在数学上很容易。本工具用于录入校对、批量数据清洗与格式核验(比如导入供应商名单前先筛掉错号),不能替代在「国家企业信用信息公示系统」等官方渠道的查询。
为什么查不到手机号的归属地?
精确归属地需要 7 位号段库,全国有数十万条且按月调整,塞进纯本地页面会拖垮首屏,也无法保证时效;另外携号转网后号码的运营商也会变。本工具因此只做「号段 → 运营商」这一层可靠判断,不给出可能过时的地市信息。
为什么银行卡不显示是哪家银行?
发卡行要靠 BIN 库(卡号前 6~8 位到银行的映射)判断,这类数据每月都在变动,且不同卡组织、不同批次的号段并不对外公开——给错银行的代价大于不给。卡号本身的位数、Luhn 校验与卡组织(银联/Visa/Mastercard 等)是能可靠判定的,这也正是本工具给出的部分。
170、171 这类号段为什么只写「虚拟运营商」?
170 是移动通信转售(虚拟运营商)共用号段,1700~1709 分别归属不同基础运营商:1700/1701/1702 走电信网络,1703~1706 走移动网络,1707~1709 走联通网络。只看前 3 位无法区分,本工具不猜;171 与 162、165、167 同属转售号段,会标注基础网络并同时提示「虚拟运营商号段」。
银行卡号里有空格或短横线,能直接粘进来吗?
可以。工具会自动忽略空格与连字符再校验,所以「6222 0212 3456 7890 123」和连续数字的结果一致。这也意味着无论银行 App 用哪种分隔方式复制出来的卡号都不需要手动清理。
这些号码会被上传到服务器吗?
不会。三类校验全部在你的浏览器内完成:校验位运算、号段查表、Luhn 计算都不联网,页面也没有任何上传逻辑;计算历史只写入本机 localStorage,可随时清空,无痕模式下功能同样可用。反过来也提醒一句:不要用它处理来路不明的他人证件或卡号,这类信息受法律保护。
为什么有的银行卡号是 19 位、有的是 16 位?
位数由发卡行的编码规则决定,不是错误:境内银联借记卡常见 16~19 位,信用卡常见 16 位,部分老卡为 15 位,美国运通为 15 位。本工具接受 12~19 位是基于国际通行区间,只要 Luhn 通过且卡组织能识别,就说明号码结构是自洽的。
延伸阅读
来自本站原创文章,讲清这个工具背后的算法与口径。