银行使用什么算法生成随机数,例如(信用卡/借记卡号码)?
假设我维护数据库中的所有数字,如果我尝试以下方法,
- 生成一个随机数。
- 验证号码是否已经分配。
- 如果是,请转到步骤 1。
- 如果没有,则在数据库中为新号码创建记录并输出结果。
当卡容量增加时,它会要求更多的数据库命中。
对此还有什么看法吗??请帮忙。
银行使用什么算法生成随机数,例如(信用卡/借记卡号码)?
假设我维护数据库中的所有数字,如果我尝试以下方法,
当卡容量增加时,它会要求更多的数据库命中。
对此还有什么看法吗??请帮忙。
非重复随机数问题有三种通用解决方案:
如果您想要一个大范围的数字,然后选择一个并拒绝它,如果它是重复的。如果范围很大,那么这不会导致太多的重复尝试。这就是你上面提到的。
如果您想要一个小范围内的大量数字,则将所有数字放在一个数组中并打乱数组。Fisher-Yates 算法是阵列改组的标准。从打乱的数组中按顺序取出随机数。
如果您想要大范围的大量数字,请使用适当大小的加密算法。例如,对于 64 位数字,使用 DES 并按顺序加密 0、1、2、3、...。输出保证唯一,因为加密是可逆的。可以为任何方便的数字范围设置Hasty Pudding Cipher 。
你有什么要求?我想你需要生成唯一的随机数。
根据条目的数量,您的第 2 步可能需要很长时间。
使用任何散列算法(如 SHA1 或 MD5)获得良好的伪随机数
这里也有一个罕见的可能性是两个条目可以有相同的随机数
为了使其完全独一无二,您可以将随机数与条目的唯一 ID 组合在一起。
例如。您有 100 个唯一 ID 为 1 到 100 的条目。要获得第 100 个条目的唯一随机数,请生成一个随机数,例如 1129642347 并将其与唯一 ID 100 组合在一起。作为一种简单的方法,您可以使用连接。那么随机数就变成了1129642347100
卢克在这里有一点。信用卡号不是随机的,它们只是对Luhn 算法有效的数字。卡背面的号码(3 位或 4 位安全码)应为随机数。