网站如何立即知道某个信用卡号是否错误?

信息安全 信用卡 金融
2021-08-28 14:30:28

我正在通过我的 ISP 的在线门户更新我的 Internet 订阅。令我震惊的是,当我输入信用卡详细信息时,我输入了我的信用卡类型(万事达卡、维萨卡、AA 等),当我输入数字时,有一个数字输入错误。当我按下提交按钮时,网站自动给我一个错误,我输入的卡号无效。我感觉这是在浏览器本地完成的,并且没有在服务器上推送和检查数据,也没有发回回复。

每个供应商都有任何数字序列吗?否则,网站(本地)如何知道错误的号码?

4个回答

校验和

CC 号码以及几乎任何其他精心设计的重要号码(例如银行帐号)都倾向于包含校验和以验证号码的完整性。虽然不是一项安全功能(因为计算起来很简单),但如果 (a) 出现单个拼写错误或 (b) 交换两个相邻数字(这是手动操作时最常见的两个错误),体面的校验和算法可以保证始终失败输入长数字。

http://rosettacode.org/wiki/Luhn_test_of_credit_card_numbers就是这种测试的一个例子。

发行人

如果 CC 号码在技术上是正确的,它可能仍然不是真正的 CC 号码。验证方法既简单又复杂 - 通常,如果您有适当的访问权限,您可以为每个卡号范围查找发卡机构,然后询问发卡机构 [s card systems] 是否他们认为这是一张有效的卡。好吧,第二部分通常作为 CC 支付的一部分发生,但有时会在此之前验证发行人,作为扩展测试;但不在客户端浏览器上。

在美国,他们使用 Luhn 算法:

http://en.wikipedia.org/wiki/Luhn_algorithm

算法如何验证数字:

  1. 从最右边的数字(即校验位)开始,向左移动,每第二位的值加倍;如果这个加倍运算的乘积大于 9(例如,8 × 2 = 16),则将乘积的数字相加(例如,16: 1 + 6 = 7, 18: 1 + 8 = 9)。
  2. 取所有数字的总和。
  3. 如果总模 10 等于 0(如果总和以 0 结尾),则根据 Luhn 公式,该数是有效的;否则无效。

如何计算校验位:

校验位是通过计算数字总和然后计算该值的 9 倍模 10 获得的。在算法形式中:

  1. 计算数字的总和(在每隔一个数字加倍之后)。
  2. 乘以 9。
  3. 最后一位是校验位。

例子:

数字:(校验位4321-5678-7531-456x在哪里x)。

1. Number:              4   3   2   1   5   6   7   8   7   5   3   1   4   5   6   X
2. Double every second: 8       4      10      14      14       6       8      12
3. Sum digits >9:       8   3   4   1   1   6   5   8   5   5   6   1   8   5   3
4. Sum all digits:      8 + 3 + 4 + 1 + 1 + 6 + 5 + 8 + 5 + 5 + 6 + 1 + 8 + 5 + 3 = 69

5. Multiply sum by 9:   69 x 9 = 621
6. Take value mod 10:   621 mod 10 = 1  =>  x = 1

校验位是1,完整的有效数字是4321-5678-7531-4561

如果您要再次运行算法来验证数字,那么步骤 4 中所有数字的总和将是69 + 1 = 70那么, 70 mod 10 = 0, 所以这个数根据算法是有效的。

  1. 许多网站都对 CC # 进行客户端检查。所有信用卡号码的长度大致相同。(正如评论者所指出的,有几种长度。通常,实现者知道这些长度,并且有一小部分。)有与每个供应商相关的数字字符串。
  2. 从安全的角度来看,最好也有一些服务器端检查。如果您是笔测试员,那将是需要检查的东西。如果你不是,那么就远离它,因为你可能会遇到一些大麻烦。

https://www.mint.com/blog/trends/credit-card-code-01202011/

校验和、卡片范围识别和长度检查

大多数(但不是全部)卡方案使用其他答案中描述的校验和(Luhn)测试。但是,除此之外,一些算法还使用(相当基本的)基于卡号开头的卡范围识别(CRR)(AKA 范围)。有些还检查卡的长度。

例如,参见以下描述的许多不同算法的相似性:- https://stackoverflow.com/questions/72768/how-do-you-detect-credit-card-type-based-on-number