Skip to main content
CheckTown
验证工具

信用卡验证器:Luhn 算法如何识别无效卡号

发布于 阅读约 6 分钟
本文目录

什么是信用卡校验?

信用卡校验是在发起交易之前检查卡号结构是否有效的过程。这包括验证卡号格式、应用 Luhn 校验和算法,以及根据前几位数字检测卡组织(Visa、Mastercard、Amex 等)。

校验与授权并不相同。卡号有效意味着格式和校验和正确——它并不能确认该卡存在、有余额或属于正在使用它的人。真正的授权需要通过支付网络联系发卡机构。

Luhn 算法如何工作

Luhn 算法(也称 mod-10 算法)是一种简单的校验和公式,由 Hans Peter Luhn 于 1954 年发明。它可以检测卡号中的意外错误——数字换位、单个数字错误以及大多数常见的输入错误。下面是它的分步工作原理。

  • 从最右边的数字(校验位)开始,向左将每隔一位的数字翻倍
  • 如果翻倍后得到的数大于 9,则从结果中减去 9(例如 8 x 2 = 16,然后 16 - 9 = 7)
  • 将所有数字相加——包括翻倍/调整后的数字和未改变的数字
  • 如果总和能被 10 整除(对 10 取模等于 0),则该卡号通过 Luhn 校验

以卡号 4532015112830366 为例:应用该算法后,各位数字之和为 40,能被 10 整除,因此通过 Luhn 校验。该算法可捕捉约 95% 的单个数字错误,以及所有相邻数字的换位错误。

免费试用 —— 无需注册

校验一个信用卡号 →

通过 BIN 检测卡类型

银行识别号(BIN)——即卡号的前 6 至 8 位——用于标识卡组织和发卡银行。每个卡组织都有独特的前缀和长度要求。

  • Visa——以 4 开头,通常为 16 位(部分较旧的卡为 13 位)
  • Mastercard——以 51-55 或 2221-2720 开头,始终为 16 位
  • American Express——以 34 或 37 开头,始终为 15 位
  • Discover——以 6011、65 或 644-649 开头,始终为 16 位

常见使用场景

客户端信用卡校验在 Web 应用和业务流程中有若干实际用途。

  • 电商结算——在提交给支付处理商之前校验卡号格式,以减少失败交易和 API 调用
  • 支付表单体验——在用户输入时实时显示卡类型图标(Visa、Mastercard 等),并立即高亮错误
  • 欺诈防范——在明显无效的卡号到达支付网关之前将其拦截,从而降低被拒交易的处理费用
  • 测试卡号生成——开发者使用符合 Luhn 校验的测试卡号(如 Visa 的 4111 1111 1111 1111)来测试支付流程,而无需使用真实卡片

安全注意事项

信用卡校验是一种格式检查,而非安全措施。理解它的局限性对于构建安全的支付系统至关重要。

  • 客户端校验可以捕捉输入错误,但无法检测被盗或已注销的卡——务必通过符合 PCI DSS 标准的支付网关进行处理
  • 切勿存储完整卡号——使用支付服务商(Stripe、Braintree、Adyen)提供的令牌化服务,用安全令牌替换卡片数据
  • PCI DSS 合规要求持卡人数据绝不能接触你的服务器——应使用托管式支付字段或基于重定向的结算流程

常见问题解答

Luhn 算法会产生误报吗?

会。Luhn 算法只校验校验和——它确认的是卡号在数学上一致,而非确实存在一张使用该号码的真实卡片。你可以生成无数个通过 Luhn 校验、却不对应任何已发行卡片的号码。这正是 Luhn 校验之后必须始终配合卡组织实际授权的原因。

虚拟卡号遵循相同的规则吗?

是的。由银行以及 Apple Pay、Google Pay 或 Privacy.com 等服务生成的虚拟卡号,遵循与实体卡相同的 BIN 前缀和 Luhn 校验和规则。它们是由相同卡组织发行的有效卡号——唯一的区别在于它们可能是临时的、一次性的,或仅限特定商户使用。

开发时可以使用哪些测试卡号?

支付处理商提供了专门的测试卡号:Visa 4111 1111 1111 1111,Mastercard 5500 0000 0000 0004,Amex 3782 822463 10005,Discover 6011 1111 1111 1117。这些卡号可通过 Luhn 校验,并被测试/沙箱环境识别。切勿使用真实卡号进行测试——即便在开发阶段,也只应使用支付服务商提供的官方测试卡号。

相关工具