乱数生成アルゴリズム

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

私はDB内のすべての番号を維持し、私は以下のアプローチを試してみて、

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

カードの音量が上がると、dbヒット数が増えます。

他にこれを取る??助けてください。

0
これはあなたの質問に接するものですが、クレジットカード番号はランダムではありません。 en.wikipedia.org/wiki/Bank_card_number を参照してください。
追加された 著者 Christopher McAtackney,
クレジットカードは順次ですか?仮想アカウント番号はどうですか?
追加された 著者 joshu,
クレジットカード番号とデビットカード番号はランダムであると思いますか?
追加された 著者 LukeH,
クレジットカードと銀行の番号は全くランダムではありません。
追加された 著者 Boundless,

3 答え

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

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

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

  3. 広い範囲の数字が必要な場合は、適切なサイズの暗号化アルゴリズムを使用します。例えば。 64ビットの数値の場合はDESを使用し、0,1,2,3、...の順に暗号化します。暗号化が可逆的であるため、出力は一意に保証されます。 Hasty Pudding Cipher は、便利な数字の範囲で設定できます。

5
追加された

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

あなたのケースのステップ2は、エントリの数に応じて長い時間がかかることがあります。

SHA1やMD5のようなハッシュアルゴリズムのいずれかを使って良い擬似乱数を得る

ここでも、2つのエントリが同じ乱数を持つことができる稀な可能性があります

完全に一意にするために、エントリーの一意のIDで乱数をまとめることができます。

たとえば。一意のids1〜100を持つ100個のエントリがあります。100番目のエントリに対して一意の乱数を取得するには、乱数を生成します(1129642347など)。一意のID 100を使用します。その後、乱数は1129642347100になります

0
追加された

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

0
追加された
それらは完全にランダムではありませんが、銀行によって決定される部分はランダムである可能性があります.-割り振る方法は決まります。彼らは確かに逐次ではありません。
追加された 著者 Nick Johnson,