工具
指南

银行卡 / 信用卡号校验

开发

使用 Luhn 校验和验证卡号并识别发卡品牌(Visa、Mastercard、Amex、UnionPay、Discover)。完全在浏览器本地运行。

100% 客户端 无后端

不获取远程 URL;请直接粘贴你的 JSON。

校验完全在浏览器本地进行,卡号不会被发送或存储。
请输入卡号进行校验。
本页内容

什么是银行卡号校验器?#

支付卡号(即 PAN,Primary Account Number)并不是一串随机数字。它的前若干位是 BIN 前缀,标识发卡方(Visa 以 4 开头,Mastercard 以 51–55 或 2221–2720 开头,以此类推);它的总长度落在该品牌特有的一个窄区间里;它的最后一位是校验位,按某种算法算出来,使整串数字满足 Luhn 校验。一个校验器要做的,就是把这三层信号拆开,告诉你某一串数字是不是格式合法——而不是告诉你这是一张真实发行、当前可用、能扣到钱的卡。

本页做的就是这件事,而且完全在你的浏览器里完成。输入或粘贴一串数字,它会根据 BIN 前缀识别品牌、把数字格式化成易读的 4 位一组、跑一遍 Luhn 校验,并按该品牌的实际长度规则核对位数。你会在这些场景用到它:做收银台表单时(我的字段级校验和真实的 BIN 规则对得上吗?)、想搞懂 Luhn 是怎么工作时、或者要核对一段测试数据时。

切勿输入真实卡号。 请使用支付网关公布的测试卡号(test PAN),或者你自己为学习而生成的数字。本工具全程本地运行、不传输任何数据,但把任何 PAN 都当作敏感信息对待,永远是对的。

如何使用#

  1. 先看输入框上方的 隐私说明——它确认你输入的数字不会离开浏览器。
  2. 在 卡号 字段里输入或粘贴。空格、连字符、点号、字母都会被自动剥离;你把 4111-1111 1111.1111 直接粘进去,会被读成 4111111111111111。
  3. 点 示例(Sample)载入一张常见的 Visa 测试卡号,或点 清空(Clear)重置。
  4. 阅读结果卡片:
    • 判定(verdict)行说明这串数字是否格式合法。
    • 品牌徽标 显示识别出的发卡方(Visa、Mastercard、American Express、Discover、UnionPay),或匹配不到任何 BIN 前缀时显示「未知」。
    • 分组(grouped)把数字按 4 位一组展示,方便复制。
    • 下面三行检查分别报告 品牌、Luhn(通过 / 未通过)和 长度(合规 / 越界),让你看清哪一条规则没过,而不是只甩给你一个干瘪的「无效」。

主要特性#

  • 从零实现的 Luhn 校验。 就是卡号从上世纪 60 年代起一直在用的那套算法:从右往左遍历,每隔一位乘 2,求和,再判断能否被 10 整除。末尾那位校验位的存在,保证了任何单个数字的输错都一定会被查出。
  • 五种品牌的 BIN 前缀识别。 Visa、Mastercard、American Express、Discover、UnionPay,按优先级顺序匹配,避免以 6 开头的品牌(Discover 的 6011/65 与 UnionPay 的 62)互相冲突。
  • 按品牌核对长度。 Amex 是 15 位;Visa 是 13 或 16 位;Discover 和 UnionPay 可以是 16 到 19 位。应用的是所识别品牌对应的长度规则,前缀未知时退回到通用的 12–19 位区间。
  • 对各种语种数字安全。 阿拉伯-印度数字(٤١١١)、波斯语数字、天城文数字、孟加拉语数字、全角数字(123)都会在校验前被转写成 ASCII 0–9,所以同一张 PAN 不论用户用什么输入法、什么语种环境,校验结果都一致。
  • 4 位一组的显示格式。 16 位 PAN 变成 4111 1111 1111 1111;15 位 Amex 变成熟悉的 3782 8224 6310 005(4-4-4-3)。
  • 严格本地。 没有后端,也没有任何网络请求。PAN 在内存里处理,并在同一次按键里渲染进结果卡片。

实战示例#

点 示例 载入经典的 Visa 测试卡号,或者输入 4111 1111 1111 1111。结果卡片读数:

verdict   Valid
brand     Visa
grouped   4111 1111 1111 1111
Luhn      pass
length    ok   (16 digits)

再试一张 American Express 测试卡号,故意带点别扭的空格——粘贴 3782 822463 10005。工具剥掉空格,从 37 前缀识别出 Amex,并按 Amex 自己的分组方式重新排版:

verdict   Valid
brand     American Express
grouped   3782 8224 6310 005
Luhn      pass
length    ok   (15 digits)

最后,把 Visa 卡号的某一位改成 4111 1111 1111 1112。品牌和长度依然没问题,但 Luhn 这回过不了——工具会明确告诉你,而不是把「是哪条检查挂了」藏起来:

verdict   Invalid
brand     Visa
grouped   4111 1111 1111 1112
Luhn      fail
length    ok   (16 digits)

在调试表单时,这种区分很有价值:Luhn 挂了通常意味着输错了某一位;长度挂了则意味着品牌不对,或者粘贴时被截断了。

常见问题#

显示「合法」就代表这卡真的能用吗?#

不是。「合法」只表示这串数字格式正确——它的前缀能对应到已知品牌、长度符合该品牌、并且通过 Luhn 校验。它完全不说明这张卡是否发行过、是否仍在有效期内、是否有余额。请把它当成格式检查来看待,就像你校验一个邮箱地址的形状,并不知道这个收件箱是否真实存在。

为什么 Luhn 能抓住每一次单个数字的输错?#

因为校验和会让相隔的数字轮流乘 2:改动其中一位,会让总和偏移一个永远不是 10 的倍数的量;而交换相邻两位数字带来的总和变化,Luhn 同样能察觉(只有极窄的例外)。它当初被设计出来,正是为了抓住人在键盘上最容易犯的那类输录错误。

我粘贴的数字是非拉丁字符的,还能用吗?#

能。校验器在做任何事之前,会先把阿拉伯-印度、波斯、天城文、孟加拉、全角数字字形转写成 ASCII,所以 ٤١١١ 会被当作 4111 处理。这让校验在各种语种和输入法下保持一致,而「分组」展示里也始终用 ASCII 数字。

支持哪些卡品牌?#

Visa、Mastercard、American Express、Discover、UnionPay,按各自公开的 BIN 前缀范围识别。前缀匹配不到这五种(比如以 1 或 9 开头)的数字会报「未知」品牌;但只要长度落在通用 12–19 位区间、且通过 Luhn,它仍然会被判为格式合法——只是不属于这五种已建模品牌之一。