随机数发生器算法

时间:2011-11-24 17:52:10

标签: algorithm random numbers probability prng

银行使用什么算法生成随机数,如(信用卡/借记卡号码)?

假设我维护数据库中的所有数字,如果我尝试以下方法,

  1. 生成随机数。
  2. 验证号码是否已分配。
  3. 如果是,请转到第1步。
  4. 如果没有在DB中为新号码创建记录并输出结果。
  5. 当卡片音量增加时,它会要求更多的db命中。

    对此有何看法?请帮忙。

3 个答案:

答案 0 :(得分:5)

非重复随机数问题有三种通用解决方案:

  1. 如果你想要一个大范围的几个数字,那么选择一个并拒绝它,如果它是重复的。如果范围很大,那么这不会导致重复尝试太多。这就是你在上面提到的。

  2. 如果你想要一个小范围的很多数字,那么列出一个数组中的所有数字并随机播放数组。 Fisher-Yates algorithm是阵列改组的标准。从随机数组中按顺序获取随机数。

  3. 如果您想要大范围内的大量数字,请使用适当大小的加密算法。例如。对于64位数字,使用DES并按顺序加密0,1,2,3 .......由于加密是可逆的,因此输出保证唯一。可以为任何方便的数字范围设置Hasty Pudding Cipher

答案 1 :(得分:0)

你有什么要求?我想你需要生成唯一的随机数。

根据您的情况,步骤2可能需要很长时间,具体取决于条目数量。

使用任何哈希算法(如SHA1或MD5

)获得一个好的伪随机数

这里也很少有两个条目可以具有相同的随机数

要使其完全独特,您可以使用条目的唯一ID来标记随机数。

例如。你有100个带有唯一ID 1到100的条目。为第100个条目获得一个唯一的随机数,生成一个随机数1129642347并使用唯一ID 100来标记它。作为一种简单的方法,你可以使用连接。然后随机数变为1129642347100

答案 2 :(得分:0)

卢克在这里有一点意见。信用卡号码不是随机的,只是对Luhn algorithm有效的号码。 卡中的号码(带有3或4位数的安全码号码)应为随机数。