7

まず第一に、これがstackoverflowにあるべきかどうかはよくわかりませんが、とにかく聞いてみようと思いました.

以前は、クレジット カード番号のエラー チェックに常に luhn アルゴリズムを使用していましたが、今日は、主に時間をつぶすために、verhoeff アルゴリズムを php に実装しようと考えました。

自分のカード番号でテストしたところ、問題なく動作したので、将来、クレジット カード番号のエラー チェックに luhn ではなく verhoeff を使用する必要があるかどうかを考え始めました。

今私の質問:

luhn よりも verhoeff を使用することに大きな利点はありますか?

verhoeff は実装が少し複雑であり、luhn よりも多くの転記エラーを検出できることを知っています。これにより、自然に少し遅いと思うようになりますが、より多くの転記エラーを検出するという利点と欠点は別として (もしあなたは本当にそれを呼ぶことができます)わずかに遅いということですが、他の本当の違いは考えられません。

verhoeff アルゴリズムはすべての主要なカードで機能しますか?

luhn がすべての主要なカードで機能することはわかっていますが、verhoeff もそれらすべてで機能しますか? 私はそれがそれらすべてで機能すると仮定していますが、とにかくチェックする必要があると思いました.

luhn を使用してクレジット カード番号を確認している人しか見たことがない理由はありますか?

開発者としての私のすべての時間で、luhn アルゴリズムを使用してクレジット カード番号をチェックしている人を実際に見たことがあります。これには正当な理由があるのでしょうか、それとも単純に luhn の方が知名度が高いということでしょうか?

お時間をいただきありがとうございます。

4

1 に答える 1

9

それらは異なるアルゴリズムであり、異なる結果を与える可能性があります (結果が常に同じである場合、それらの検出力は等しくなります。Verhoeff の方が強いと既に述べたので、Luhn に異なる値を与えるいくつかの数値があることに同意する必要があります!) .

クレジット カードで使用する場合は、最後の数字と残りの数字を照合します。このチェック ディジットはカード上に存在し (固定されているため)、Luhn アルゴリズムを使用して計算されます。

クレジット カードの最後の桁は Luhn のため、Verhoeff は使用できません。代わりに Verhoeff を使用するには、既存のカード (の一部) の最後の桁を変更する必要があります。

オリジナルのクレジット カード フォーマットを設計した人々は、この選択 (modulo history details) を持っており、Luhn を使用することにしました。彼らが選んだ。Luhn チェック ディジットは既存のカードに存在するため、後から判断を変更することはできません。

(どうやってこのアルゴリズムであなたのカードをチェックしたのか私にはわかりません。あなたは運が良かったのか、あなたのコードが壊れていたのか、それとも私が間違っていたのか...)

簡単に言えば、機能しません。それらは同じではなく、Luhn の選択はクレジット カード発行会社によって行われました。

より複雑な言い方をすれば、この 2 つに互換性がある場合は、電力が等しくなり、切り替える意味がなくなります。同一の結果を与える異なるべき乗の 2 つのチェックサムを持つことはできません。微妙なところですが、よく考えてみてください。

于 2011-11-24T11:44:11.407 に答える