使用方法
- 打开页面就有一组完整结果:卡号已经填好为 6212345678901234569,结果区已经给出「Luhn 校验通过 · 卡组织 银联 UnionPay · 19 位」的结论,不需要先填任何东西。
- 想校验自己的卡,就把输入框里的示例号替换成你的卡号;可以带空格也可以不带,程序会先去掉空格再判断,只要里面是 12 到 19 位数字就行。
- 「银行卡号」输入框按回车会立即重新校验;也可以一边输入一边看结果,每改动一个数字结果都会当场更新。
- 结果区的第一行就是本次校验结论:先说 Luhn 通过还是未通过,再说识别出的卡组织,最后是卡号长度和卡种提示,全部是当场算出来的,不是固定文案。
- 结果区下面是「测试卡号对照表」,列出一批常见测试卡号与其 Luhn 结果与卡组织,方便你对照自己算出来的结论是否正确。
- 「复制结果」复制结果区的纯文本,「复制对照表」复制制表符分隔的表格,「导出 CSV」则保存成 Excel 能直接打开的带标记文件。
- 本页不联网、不写本地存储,刷新即回到默认示例;你输入的卡号只在本机内存里算完即弃,不会被记录。
这个银行卡号校验工具能解决什么
这个银行卡号校验工具帮你在不连网、不上传卡号的前提下,快速判断一串数字「长得像不像一张合法的银行卡」。最常见的使用场景是表单录入:用户在页面上填了一串卡号,提交前先用 Luhn 算法筛掉明显多一位、少一位或按错键的号码,能挡掉绝大部分手误,省去后续一连串无谓的银行侧报错。
第二类场景是识别卡组织。不同卡组织的前缀(BIN 前缀)各有规律:4 开头多半是 Visa,51 到 55 或 2221 到 2720 是 Mastercard,34、37 是 American Express,62 是银联,35 开头一段是 JCB,6011、65、644 到 649 是 Discover。知道卡组织后就能预先选择对应的支付通道、提示用户该卡是否支持某种验证方式。
第三类场景是核对长度。卡号长度本身也是线索:American Express 固定 15 位,多数 Visa 与 Mastercard 是 16 位,银联常见 16 到 19 位。长度明显偏离典型区间时,即便 Luhn 通过也要提醒用户复核。
必须写清的边界:仅凭卡号前缀只能识别「卡组织」,绝对识别不了具体是哪家发卡银行——那需要完整的 BIN 数据库,几万条前缀远不是页面里这几条规则能覆盖的。本页因此明确不做银行识别,也不会给你一个具体的银行名称。
Luhn 校验与卡组织识别的原理
Luhn 算法(也叫模十算法)是一个极轻量的校验和,用来发现卡号里因为抄写、按键产生的单位错误与大部分相邻换位错误。做法是从右往左数,把奇数位(从右数第 1、3、5…位)原样相加,把偶数位(从右数第 2、4、6…位)先乘 2,若乘积大于 9 就再减去 9,然后把两部分求和。最终总和能被 10 整除,就认为「Luhn 校验通过」。
为什么是「乘 2 再减 9」?因为对任意一位数字 d,2d 若超过 9,它的十进制各位之和恰好等于 2d−9(例如 7×2=14,1+4=5,而 14−9=5)。这一步等价于把两位结果按位相加,保证了每一位对总和的贡献稳定,又让算法对单数字错误高度敏感。它只能查错,不能防伪造——知道规则的人随时能构造出通过 Luhn 的任意号码,所以通过校验不等于「这是一张真实存在的卡」。
卡组织识别靠的是前缀与长度的联合判断:先按开头几位数字归到某个组织,再核对长度是否落在该组织的典型区间里。下面这张变量表列出了本页用到的全部判定量与它们的取值含义。
| 变量 | 含义 | 取值 | 影响 |
|---|---|---|---|
| card | 原始卡号 | 12 ~ 19 位数字(空格会被忽略) | 校验与识别的唯一输入 |
| luhn | Luhn 校验结论 | 通过 / 未通过 | 总和能否被 10 整除决定 |
| org | 卡组织 | 银联、Visa、Mastercard、Amex、JCB、Discover、未知 | 由前缀与长度联合判定 |
| len | 卡号长度 | 去掉空格后的位数 | 用来核对是否落在组织典型区间 |
| type | 卡种提示 | 借记卡 / 信用卡 / 无法区分 | 仅按组织给出经验提示,不精准 |
完整示例
默认示例的卡号是 6212345678901234569,共 19 位。按 Luhn 从右往左加权求和后得到的总和是 90,90 能被 10 整除,所以结论为「Luhn 校验通过」;再看前缀是 62,落在银联的典型区间 16 到 19 位里,于是卡组织判定为「银联 UnionPay」;长度 19 位,卡种提示为「借记卡或信用卡(仅凭卡号无法区分)」。把这四段拼起来就是结果区里那一整行:
6212345678901234569 → Luhn 校验通过 · 卡组织 银联 UnionPay · 19 位(银联典型 16-19 位) · 卡种:借记卡或信用卡(仅凭卡号无法区分)
把卡号换成 4111111111111111(经典 Visa 测试号,16 位),结果会变成「Luhn 校验通过 · 卡组织 Visa · 16 位(Visa 典型 13/16/19 位) · 卡种:多为信用卡亦发借记卡」;换成 1234567890123456,Luhn 求和不被 10 整除,结论变为「Luhn 校验未通过 · 卡组织 未知 · 16 位(长度 16 位) · 卡种:未知(无法仅凭卡号判断)」。两次结果同样是当场算出来的,不是写死的。
测试卡号对照表
下表共 14 行:前 12 行是常见测试卡号与它们的 Luhn 结果、卡组织、长度,后 2 行是明显不合法的示例。所有结论都由页面里的同一套 Luhn 与前缀判定函数现场算出,和你在上方输入框里得到的结果用的是同一套逻辑;默认显示 12 行,点「加载更多」看余下 2 行。
| 测试卡号 | Luhn 结果 | 卡组织 | 长度 |
|---|---|---|---|
| 4111111111111111 | 通过 | Visa | 16 |
| 5555555555554444 | 通过 | Mastercard | 16 |
| 378282246310005 | 通过 | Amex | 15 |
| 6011111111111117 | 通过 | Discover | 16 |
| 3530111333300000 | 通过 | JCB | 16 |
| 6212345678901234569 | 通过 | 银联 UnionPay | 19 |
| 4917610000000000003 | 通过 | Visa | 19 |
| 2223003122003222 | 通过 | Mastercard | 16 |
| 6011000990139424 | 通过 | Discover | 16 |
| 3566002020360505 | 通过 | JCB | 16 |
| 5105105105105100 | 通过 | Mastercard | 16 |
| 4012888888881881 | 通过 | Visa | 16 |
| 1234567890123456 | 不通过 | 未知 | 16 |
| 9876543210987654 | 不通过 | 未知 | 16 |
横向读这张表能得出两条实用结论:第一,通过 Luhn 不等于真实存在,像 0000000000000000 这种全零号也能通过校验,只是卡组织识别不出来;第二,卡组织与长度强相关,American Express 固定 15 位、银联常见 16 到 19 位,长度一旦偏离就要提高警觉。
结果边界与错误提示
- 卡号里出现非数字字符(空格以外的符号、字母)时,提示会点名具体字符:「卡号含非法字符「X」:只能由数字与空格组成,请删去后重试」,不会静默忽略。
- 去掉空格后长度不在 12 到 19 位时,提示写明当前位数与允许区间:「卡号长度为 N 位:合法卡号通常为 12 到 19 位,请检查是否多输或少输了数字」。
- 卡号为空时,输入框会自动填回示例号 6212345678901234569 并立即校验,不会留下空白结果。
- Luhn 未通过时结论明确写「未通过」,并附上「卡组织 未知」与「卡种:未知(无法仅凭卡号判断)」,不暗示任何发卡方。
- 卡组织识别不出来的合法卡号(如 0000 开头的全零号)会标记为「未知」,这是预期行为,不等于程序出错。
- 页面明确不识别具体发卡银行:无论卡组织识别成什么,都不会给出「某某银行」字样,需要精确银行请查完整 BIN 库。
- 卡种提示(借记卡 / 信用卡)仅按组织给出经验值,例如银联只能说「借记卡或信用卡(仅凭卡号无法区分)」,不要当作准确结论。
- 本页不上传任何输入,也不写本地存储;导出的对照表 CSV 带字节序标记,复制结果为纯文本。
常见问题
Luhn 校验通过就等于这张卡真实存在吗?
不等于。Luhn 只是一个查错校验和,用来发现录入时的手误,知道规则的人随时能拼出通过校验的号码。它只能证明「格式上没写错」,不能证明「这是一张银行发行的真实卡」,真实有效性只能由发卡机构验证。
为什么 62 开头的一定算银联?
62 是中国银联在 ISO/IEC 7812 分配到的卡号前缀区间,本页据此把 62 开头且长度落在 16 到 19 位的号码判为银联。但 62 只是组织线索,具体是哪家银行发行的仍需查完整 BIN 库,本页不提供这一步。
卡号里能不能带空格?
能。程序会先把空格全部去掉再做校验与识别,所以「6212 3456 7890 1234 569」和原样连写结果一致。但最终的结论、对照表只显示去掉空格后的纯数字卡号。
为什么有的号 Luhn 通过却显示卡组织未知?
这种情况通常出现在全零号或不在任何已知组织前缀里的号码上。Luhn 只管格式对错,组织识别靠前缀,两者是独立的两步;格式对但前缀不认识,就会给出「通过 · 未知」的组合。
American Express 为什么只有 15 位?
Amex 的卡号标准长度就是 15 位(34、37 开头),比其他主流卡组织短一位,这是 ISO 分配时就定好的。页面据此把 15 位且 34/37 开头的号码判为 American Express(签账卡)。
借记卡和信用卡到底怎么分?
仅凭卡号分不出来。同一个组织(尤其是银联、Visa、Mastercard)既发借记卡也发信用卡,前缀规则无法区分。页面只能给出经验提示,准确卡种要由发卡行在你的账户信息里标明。
我的卡号会不会被上传?
不会。整个校验与识别过程都跑在你的浏览器本地,卡号只存在于本机内存,算完即弃,页面既不发请求也不写本地存储,刷新后输入框回到默认示例。
导出的对照表 CSV 带字节序标记吗?
带。对照表 CSV 导出时写入 UTF-8 字节序标记,Excel 双击不乱码;「复制对照表」是制表符分隔文本,粘进表格软件会自动分列,两者内容一致。