银行使用什么算法生成随机数,如(信用卡/借记卡号码)?
假设我维护数据库中的所有数字,如果我尝试以下方法,
当卡片音量增加时,它会要求更多的db命中。
对此有何看法?请帮忙。
答案 0 :(得分:5)
非重复随机数问题有三种通用解决方案:
如果你想要一个大范围的几个数字,那么选择一个并拒绝它,如果它是重复的。如果范围很大,那么这不会导致重复尝试太多。这就是你在上面提到的。
如果你想要一个小范围的很多数字,那么列出一个数组中的所有数字并随机播放数组。 Fisher-Yates algorithm是阵列改组的标准。从随机数组中按顺序获取随机数。
如果您想要大范围内的大量数字,请使用适当大小的加密算法。例如。对于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位数的安全码号码)应为随机数。