0

(クレジットカード/デビットカード番号) のような乱数を生成するために銀行が使用するアルゴリズムは何ですか?

DBにすべての数値を保持しているとします。以下のアプローチを試してみると、

  1. 乱数を生成します。
  2. 番号がすでに割り当てられているかどうかを確認します。
  3. はいの場合は、手順 1 に進みます。
  4. いいえの場合、DB に新しい番号のレコードを作成し、結果を出力します。

カードのボリュームが増加すると、より多くの db ヒットが要求されます。

これについて他に何かありますか?? 助けてください。

4

3 に答える 3

5

重複しない乱数の問題には、次の 3 つの一般的な解決策があります。

  1. 広い範囲からいくつかの数値が必要な場合は、1 つを選択し、重複している場合は拒否します。範囲が大きい場合は、試行が繰り返されることはありません。これはあなたが上で述べたものです。

  2. 狭い範囲から多数の数値が必要な場合は、すべての数値を配列に設定し、配列をシャッフルします。Fisher-Yates アルゴリズムは、配列シャッフルの標準です。シャッフルされた配列から乱数を順番に取り出します。

  3. 広い範囲から多数の数値が必要な場合は、適切なサイズの暗号化アルゴリズムを使用してください。たとえば、64 ビットの数値の場合、DES を使用し、0、1、2、3、... を順番に暗号化します。暗号化は元に戻せるため、出力は一意であることが保証されます。Hasty Pudding Cipherは、都合のよい範囲の数値に設定できます。

于 2011-11-24T21:15:10.483 に答える
0

あなたの要件は何ですか?一意の乱数を生成する必要があると思います。

あなたのケースのステップ 2 は、エントリの数によっては時間がかかる場合があります。

SHA1 や MD5 などのハッシュ アルゴリズムを使用して適切な疑似乱数を取得する

ここでも、2 つのエントリが同じ乱数を持つ可能性がまれにあります。

完全に一意にするために、エントリの一意の ID を使用して乱数をクラブできます。

たとえば。1 から 100 までの一意の ID を持つ 100 個のエントリがあります。100 番目のエントリの一意の乱数を取得するには、1129642347 などの乱数を生成し、一意の ID 100 を使用します。簡単な方法として、連結を使用できます。次に、乱数は 1129642347100 になります

于 2011-11-24T17:59:41.020 に答える
0

ルークはここでポイントを持っています。クレジット カード番号はランダムではなく、 Luhn アルゴリズムに対して有効な番号です。カード裏面の番号(3桁または4桁の暗証番号)は乱数となります。

于 2011-11-24T18:04:00.230 に答える