7

首先,我不确定这是否应该在stackoverflow上,但我想我还是会尝试询问。

以前我一直用luhn算法对信用卡号进行错误检查,但今天我想我会在php中实现verhoeff算法,主要是为了打发时间。

我在自己的卡号上对其进行了测试,它运行良好,这让我开始思考是否应该在未来使用 verhoeff 而不是 luhn 来检查我的信用卡号错误。

现在我的问题:

与 luhn 相比,使用 verhoeff 会有什么显着优势吗?

我知道 verhoeff 在它的实现中稍微复杂一些,它可以检测到比 luhn 更多的转录错误,这自然会让我相信它有点慢,但除了检测更多转录错误的优点和缺点(如果你真的可以称之为)稍微慢一点,我想不出任何其他真正的区别。

verhoeff 算法适用于所有主要卡片吗?

我知道 luhn 将适用于所有主要牌,但 verhoeff 也适用于所有主要牌吗?我假设它对所有人都有效,但我想我还是应该检查一下。

我只看到有人使用 luhn 来检查信用卡号码,这是有原因的吗?

在我作为开发人员的所有时间里,我只真正看到有人使用 luhn 算法来检查信用卡号码。这有充分的理由吗,还是仅仅是因为 luhn 更出名?

任何帮助将不胜感激,感谢您的时间。

4

1 回答 1

9

它们是不同的算法,可以给出不同的结果(如果结果始终相同,那么它们的功率将相等 - 你已经说过 Verhoeff 更强大,所以你必须同意有些数字给 Luhn 提供了不同的值!) .

与信用卡一起使用时,您将最后一位数字与其余数字核对。此校验位存在于卡上(因此是固定的),并使用 Luhn 算法计算。

所以你不能使用 Verhoeff,因为信用卡上的最后一个数字是 Luhn 的。要改用 Verhoeff,您必须更改(某些)已经存在的卡片的最后一位。

设计原始信用卡格式的人有这个选择(取模历史细节)并决定使用 Luhn。他们选择了。回想起来,您无法更改他们的决定,因为 Luhn 校验位存在于现有卡上。

(我不知道你是如何用这个算法检查你的卡片的。以太你很幸运,或者你的代码被破坏了,或者我错了......)

简单来说:它不会工作。它们不一样,Luhn 的选择是由信用卡发行商做出的。

In more complex terms: if the two were compatible then they would be equal in power and there would be no point in switching. You cannot have two checksums of different power that give identical results. It's a subtle point, but think it over...

于 2011-11-24T11:44:11.407 回答