跳转到内容
Tutorial

在一次 API 调用中使用 Luhn 检查验证信用卡

| 5 min read

在卡号错别字和假冒卡号到达您的支付处理器之前将其发现。 一次 POST 返回 Luhn 有效性、品牌(Visa、Mastercard、Amex)以及信用卡或借记卡。 免费套餐,无 SDK。

Payment cards representing credit card validation at checkout
Photo by CardMapr.nl on Unsplash

输入错误的卡号会让您付出双倍的代价:用户会看到令人困惑的拒绝,而您的处理器 对失败的授权收取费用。 您可以在他们离开之前抓住其中的大部分 浏览器。 Luhn 算法是每个真实卡号都满足的校验和,因此一个数字 如果失败,则保证无效,并且永远不需要到达 Stripe 或 Adyen。

此端点运行 Luhn 检查并在一次 POST 中检测卡品牌。 这是完整的通话。

请求

以字符串形式发送号码。 空格和破折号会自动删除,所以 4111 1111 1111 11114111-1111-1111-1111 两者都有效。 回应 告诉你三件事:

  • valid:是否通过 Luhn 校验和。
  • brand:Visa、Mastercard、Amex、Discover、JCB、Diners Club 或银联。
  • type:贷方或借方,来自发行人识别号。

在 Node.js 中结账时进行验证

在向处理器发送任何内容之前调用端点。 失败的 Luhn 检查返回一个明确的 您可以向用户显示错误,并且您可以跳过假号码可能产生的授权费:

阻止 React 表单中的错误输入

React Hook Form 在提交之前运行异步验证器,因此无效的数字永远不会触发 订单。 将呼叫直接连接到 register:

保持 PCI 范围较小。 风险最低的设计是通过以下方式在浏览器中对卡片进行标记: 您的处理器,并且仅验证品牌徽标的前导数字。 运行一个完整的 当您真正需要时进行服务器端验证,而不是每次击键时进行验证,并且从不记录 完整号码。

它会告诉你什么,不会告诉你什么

Luhn 验证是一个过滤器,而不是一个保证。 传递的数字是格式良好的; 它并没有证明 该卡存在或有资金。 只有通过您的处理器的授权才能确认这一点。 使用 这个端点可以廉价地拒绝明显的垃圾并驱动卡品牌 UI,然后让您的 处理器处理真正的费用。

信用卡验证器是 botoi 上大约 200 个单一用途端点之一,此外还有 IBAN 和增值税 验证 用于其余的计费流程。 所有这些都位于一个 API 密钥后面,其中 5 要求/分钟免费。 尝试在 互动游乐场 或连接 MCP服务器 验证克劳德的卡片。

FAQ

卢恩检查实际上证明了什么?
Luhn 算法是一种校验和,可以捕获拼写错误和随机生成的假货。 未通过 Luhn 的号码保证无效,因此您可以在它到达您的支付处理器之前拒绝它。 通过 Luhn 的数字是格式良好的,但这并不意味着该卡存在或有资金。 只有通过您的处理器的授权才能确认这一点。 使用 Luhn 廉价地过滤明显的垃圾,然后让 Stripe 或 Adyen 进行真正的收费。
API 是否存储或记录我发送的卡号?
不会。该号码在服务器端进行验证,并且从不存储或记录。 也就是说,明智的模式是根本不通过网络发送完整的 PAN。 在 UI 的前 6 到 8 位客户端上运行品牌检测,并在您真正需要服务器端(远离 PCI 范围)的情况下保留完整的验证调用。
它检测哪些卡品牌?
Visa、Mastercard、American Express、Discover、JCB、Diners Club 和 UnionPay,基于发卡机构识别码(前导数字)。 该响应还告诉您该号码是否看起来像信用卡或借记卡产品,这对于区分很重要的路由或附加费逻辑很有用。
我可以在用户输入时显示卡品牌徽标吗?
是的,这是最高价值的用途。 从前几位数字中检测品牌,并在用户完成输入之前交换匹配的徽标。 它可以让用户放心表单正在运行,并减少“我的卡是否被接受?”的问题。 支持门票。 取消调用或在本地对前缀运行品牌检测,并保留提交的完整验证。
运行 Luhn 检查足以满足 PCI 合规性吗?
不。Luhn 检查是输入验证,而不是合规性控制。 如果您的服务器触及完整的卡号,则无论验证如何,您都处于 PCI 范围内。 最低范围的设计是通过浏览器中的处理器进行标记,并且仅验证 UI 的前缀。 该 API 有助于验证层; 它不会改变您的范围义务。

开始使用 botoi 构建

150+ 个 API 端点,涵盖查询、文本处理、图片生成和开发者工具。免费套餐,无需信用卡。