银行使用什么算法生成随机数,例如(信用卡/借记卡号码)?
假设我维护数据库中的所有数字,如果我尝试以下方法,
- 生成一个随机数。
- 验证号码是否已分配。
- 如果是,转到第 1 步。
- 如果没有在数据库中为新数字创建记录并输出结果。
当卡片容量增加时,它会要求更多的数据库命中。
对此还有其他看法吗?请帮忙。
最佳答案
非重复随机数问题一般有3种解法:
如果您想要大范围内的几个数字,则选择一个,如果重复则拒绝。如果范围很大,那么这不会导致太多的重复尝试。这就是你上面提到的。
如果您想要小范围内的大量数字,请将所有数字放在一个数组中并打乱数组。 Fisher-Yates algorithm是数组改组的标准。从打乱后的数组中按顺序取出随机数。
如果您想要大范围内的大量数字,请使用适当大小的加密算法。例如。对于 64 位数字,使用 DES 并按顺序加密 0、1、2、3 ...。输出保证是唯一的,因为加密是可逆的。 Hasty Pudding Cipher可以设置为任何方便的数字范围。
关于algorithm - 随机数生成器算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8260971/