跳到主要内容

银行卡号校验

Luhn 校验与卡组织识别

示例
Luhn 通过银联 UnionPay19 位长度符合规范
去格式化卡号6222021234567890011
分组显示6222 0212 3456 7890 011
卡组织银联 UnionPay
长度规范符合 银联 UnionPay 的规范长度(16 / 17 / 18 / 19 位)
Luhn 校验求和能被 10 整除,编号规则自洽

Luhn 算法从校验位开始倒序处理:奇数位取原值、偶数位乘 2(大于 9 则减 9),全部求和后能被 10 整除即为通过。卡组织按开头号段判断:62 银联、4 开头 Visa、51 到 55 或 2221 到 2720 万事达、35 JCB、34 与 37 美国运通、30 与 36 与 38 大莱。输入会自动去掉空格与横线,所有计算在浏览器本地完成。

银行卡号校验怎么用

转账、绑卡、批量导入收款账号时,最怕卡号手滑输错一位。把卡号填进输入框,工具会立刻做两件事:先用 Luhn 算法验证这串数字在编号规则上是否自洽,再根据开头号段识别卡组织、核对长度是否符合规范。带空格或横线都能直接粘贴,工具会自动去掉分隔符再计算,卡号不会上传。

这个工具能做什么

  • Luhn 算法校验卡号,快速发现输错一位或相邻两位颠倒这类手误
  • 识别卡组织:银联、Visa、万事达、JCB、美国运通、大莱
  • 核对卡号长度是否符合该卡组织的常见规范,异常时用警告徽标提示
  • 自动去掉空格与横线,并按四位一组重新格式化展示
  • 给出纯数字卡号,方便直接复制去粘贴到别的系统

怎么使用(输入说明)

  1. 银行卡号:直接粘贴即可,支持纯数字、带空格、带横线三种写法,工具统一按数字处理。
  2. 位数要求:常见卡号长度是 12 到 19 位,少于或多于这个范围会直接提示长度不对。
  3. 示例按钮:提供了银联 19 位、Visa 16 位、运通 15 位三个合法样例,可以先点一下看输出长什么样。
  4. 输入变化即时出结果,不需要点计算按钮。

背后的原理/规则

Luhn 算法又称模 10 算法,是 ISO/IEC 7812 规定的自校验方法:从最右边的校验位开始向左遍历,奇数位保持原值,偶数位乘以 2,乘积大于 9 就减去 9,最后加总,能被 10 整除即为通过。它的目的不是防伪造,而是拦住单个数字写错与相邻两位颠倒这两类手误。

卡组织识别靠的是卡号开头的 BIN 号段,这些号段是公开规则:62 开头为银联,4 开头为 Visa,51 到 55 以及 2221 到 2720 为万事达,35 开头为 JCB,34 与 37 为美国运通,30、36、38 为大莱。各组织的常见卡号长度也不同,比如运通固定 15 位、万事达常见 16 位、银联常见 16 到 19 位,所以工具会顺带核对长度是否符合规范。

计算实例

以 Visa 测试卡号 4111 1111 1111 1111 为例。从右往左处理:奇数位的 1 保持原值,偶数位的 1 乘 2 得 2,把 16 位全部加总得到 20,能被 10 整除,Luhn 校验通过;开头是 4,判定为 Visa;长度 16 位,落在 Visa 的 13、16、19 位规范内,长度检查也通过。

再看反例:把最后一位改成 2,总和变成 21,不能被 10 整除,工具会标红提示 Luhn 未通过,提醒对照实体卡复核。

常见问题 FAQ

Q:卡号通过 Luhn 校验就一定是真实存在的卡吗?

A:不一定。Luhn 只是编号规则层面的自校验,能保证的是这串数字没有明显的录入错误,既不表示这张卡已经发行,也不表示账户里有钱或卡主身份属实。要真正确认卡片有效,只能通过发卡行或支付网关的实名鉴权接口完成。

Q:为什么工具能认出卡组织,却查不到具体开户行?

A:卡组织靠卡号开头的 BIN 号段判断,这些号段是公开规则,本地就能匹配。但开户行需要查询完整的 BIN 数据库,数据量极大且更新频繁,纯静态页面不联网就查不到,所以这里只做卡组织识别。

Q:校验通过但长度提示异常,这算有问题吗?

A:要看场景。号段能匹配到卡组织但长度不在该组织常见范围内,通常意味着少输或多输了一位,建议优先怀疑录入问题。少数发卡行确实会发行非标准长度的卡,如果确认卡号是从实体卡或官方渠道逐位抄下来的,可以联系发卡行核实。

常见问题

Luhn 算法是怎么判断卡号是否合法的?
从卡号最后一位(校验位)开始往前数,对奇数位置(倒数第 1、3、5 位等)保持原值,对偶数位置的数字乘以 2,若乘积大于 9 则减去 9,然后把所有处理后的数字求和。如果总和能被 10 整除,卡号就通过了 Luhn 校验。它主要用于拦截输错一位或相邻两位颠倒这类手误。
卡号通过 Luhn 校验就一定是真实存在的卡吗?
不一定。Luhn 只是编号规则层面的自校验,能保证的是这串数字没有明显的录入错误,既不表示这张卡已经发行,也不表示账户里有钱或卡主身份属实。要真正确认卡片有效,只能通过发卡行或支付网关的实名鉴权接口完成,本工具只做格式层面的自查。
为什么工具能认出卡组织,却不能查到具体开户行?
卡组织是靠卡号开头的 BIN 号段判断的,比如 62 开头是银联、4 开头是 Visa、51 到 55 是万事达,这些号段是公开规则,本地就能匹配。但开户行需要查询完整的 BIN 数据库,而且数据量大、更新频繁,纯静态页面不联网就查不到,所以这里只做卡组织识别。