信用卡号验证器|Luhn算法・卡组织识别

输入信用卡号即可通过Luhn算法验证校验位,并自动识别Visa、Mastercard、Amex等卡组织。也适合用于表单校验逻辑的测试。

[[ labels.client_side_note ]]

[[ labels.format_error ]]
[[ labels.sample_label ]]:
[[ labels.no_input ]]

[[ labels.result_label ]]

[[ labels.formatted_label ]] [[ result.formatted ]]
[[ labels.brand_label ]] [[ brandName ]] [[ labels.brand_unknown ]]
[[ labels.checksum_label ]] ✓ [[ labels.checksum_valid ]] ✗ [[ labels.checksum_invalid ]]

支持的品牌与判定条件(IIN・位数)

品牌 开头数字(IIN) 位数
Visa 4 13, 16, 19
Mastercard 51–55, 2221–2720 16
American Express 34, 37 15
Discover 6011, 65 16
JCB 3528–3589 16
Diners Club 300–305, 36, 38 14
UnionPay 62 16–19
广告

信用卡号验证器是什么

信用卡号的末位嵌有一个用于检测输入错误的校验位。通过 Luhn 算法这一计算公式来核对各位数字的排列,即可发现绝大多数单个数字打错或相邻数字顺序颠倒的情况。本工具在输入号码后会执行该项校验,并根据开头数字与位数自动识别卡组织。

需要强调的是,这仅仅是格式层面的校验。即使通过了 Luhn 校验,也不代表该号码对应一张真实存在的卡,更无法说明它是否可用。实际的信用核实必须经由支付服务商的 API 完成。输入的号码只在浏览器内处理,不会发送到任何服务器。

验证卡号的步骤

  1. 输入号码 即使包含空格或连字符也会自动去除,可以直接粘贴复制来的数值。
  2. 查看校验位结果 会以有效或无效显示 Luhn 算法的校验结果。若为无效,说明某一位数字有误。
  3. 确认卡组织识别结果 根据开头数字与位数推定卡组织,判定条件可在下方的对照表中查看。
  4. 用示例号码试验 点击示例按钮即可填入测试号码,无需使用真实卡号就能确认功能。

用好本工具的小技巧

  • 请勿输入真实卡号,可点击示例按钮使用公开的测试号码(如Visa: 4111 1111 1111 1111)来体验功能。
  • 即使号码中包含空格或连字符,也会自动去除后再判断,可直接粘贴复制来的号码。
  • 本工具仅通过Luhn算法进行格式校验,实际的信用核实、余额查询请使用支付服务商提供的API。
  • 在开发表单校验逻辑时,可用本工具分别生成有效与无效的号码,方便测试正常和异常两种情况。

信用卡号验证器的使用场景

实现表单的输入校验

可与自己编写的校验逻辑对照结果,同时准备有效与无效两种号码进行确认。

确认卡组织识别逻辑

可通过对照表查看开头数字与位数会对应到哪个卡组织,适合用于卡片图标的切换实现。

排查输入错误

支付无法通过时,可先确认号码本身的格式是否有误,有助于更快锁定原因。

学习 Luhn 算法

试着只改动其中一位数字,就能实际看到校验结果变为无效,有助于理解其原理。

广告

卡号相关术语

Luhn 算法
用于确认数字排列是否妥当的计算方法。从右起每隔一位乘以二后求和,能被十整除即判定为有效。
校验位
为检测输入错误而附加在末尾的数字,由其余各位数字计算得出。
IIN
卡号开头的发卡机构识别码。查看此处即可判别卡组织与发卡方。
卡组织
指 Visa、Mastercard、American Express 等国际品牌,由开头数字与位数的组合判定。
信用核实
确认该卡是否可用、额度是否足够的处理流程,与格式校验完全是两回事。

常见问题

不能。本工具只进行Luhn算法的格式校验,无法判断该卡是否真实存在、是否已被停用,或余额是否充足。真正的信用核实需要通过支付服务商的认证系统完成。

输入的号码不会发送到服务器,所有计算均在浏览器的JavaScript中完成。不过如果只是想测试功能,建议使用示例按钮提供的测试号码,而非真实卡号。

这是IBM的Hans Peter Luhn于1954年发明的一种错误检测算法。从卡号最右侧开始每隔一位乘以2,若所有数字之和为10的倍数,则判定格式有效,可检测出大部分的输入错误。

是根据卡号开头的几位数字(IIN:发卡行识别码)与总位数的组合来判断的。例如Visa以“4”开头,长度为13、16或19位;Mastercard以“51〜55”等开头,长度为16位;JCB以“3528〜3589”开头,长度为16位,均基于公开的规则。详细对照表请参见工具下方的“支持的品牌与判定条件(IIN・位数)”部分。

不是。通过Luhn校验只能说明该号码在格式上“没有矛盾”。即使是随机编造、并不存在的号码,只要调整最后一位数字,也能通过Luhn校验。
工具君

闲话 ― 校验位之父 Hans Peter Luhn

信用卡号末位那个不起眼的“校验位”,其实出自IBM工程师Hans Peter Luhn于1954年发明的一套算法。他因此项发明于1960年获得专利,如今专利早已失效,这套算法也就顺理成章地成为了任何人都可以自由使用的公开算法,如今几乎所有主流卡组织都在沿用它。

有趣的是,Luhn算法的原理其实很简单:从卡号最右侧开始,每隔一位将数字乘以2,若结果为两位数则将其各位相加(例如8×2=16 → 1+6=7)。把所有数字相加之后,只要总和能被10整除,该号码在格式上就会被判定为有效——如此朴素的规则,却足以拦下绝大多数的输入笔误。

正因为原理简单又通用,这一算法不仅用于信用卡,还广泛应用于IMEI号码(手机识别码)、加拿大社会保险号码等各类识别号码的输入错误检测。不过需要留意的是,Luhn算法终究只是用于“检测输入错误”,并不能判断该卡号是否真实存在,更不能判断是否还有余额。

卡号的前6〜8位则被称为“IIN(发卡行识别码)”,其中悄悄藏着这张卡属于哪个国际卡组织、由哪家银行发行的信息。本工具的卡组织识别功能,正是基于这些公开的IIN号段规则实现的。

广告