algorithm - 随机数生成器算法

标签 algorithm random numbers probability prng

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

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

  1. 生成一个随机数。
  2. 验证号码是否已分配。
  3. 如果是,转到第 1 步。
  4. 如果没有在数据库中为新数字创建记录并输出结果。

当卡片容量增加时,它会要求更多的数据库命中。

对此还有其他看法吗?请帮忙。

最佳答案

非重复随机数问题一般有3种解法:

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

  2. 如果您想要小范围内的大量数字,请将所​​有数字放在一个数组中并打乱数组。 Fisher-Yates algorithm是数组改组的标准。从打乱后的数组中按顺序取出随机数。

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

关于algorithm - 随机数生成器算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8260971/

相关文章:

java - 构建 A* 算法的问题

ios - 生成一个不重复随机数的 Swift 数组

c++ - 高效 Xorshift 向前跳过

c - 从 STDIN 读取一行以仅使用 C 提取数字标记

Java随机数

algorithm - 来自一些关于通用哈希的文本的符号

c - 通过返回在 C 中找不到主机的地址获取主机

获得最佳文本颜色的算法

batch-file - 如何让 %random% 显示负结果?

sql-server - 只获取列数据的数字部分?