随机数生成算法

发布于 2024-12-17 15:53:52 字数 232 浏览 1 评论 0原文

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

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

  1. 则生成一个随机数。
  2. 验证该号码是否已分配。
  3. 如果是,则转到步骤 1。
  4. 如果否,则在 DB 中为新号码创建一条记录并输出结果。

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

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

What algorithm is used by banks for generating random numbers like(credit cards/debit cards numbers) ?

Suppose i maintain all the numbers in DB and If i try the below approach,

  1. Generate a random number.
  2. Verify whether the number has been already assigned.
  3. If yes goto step 1.
  4. If no create a record in DB for the new number and output the result.

It will ask for more db hits when the card volume increases.

Any other take on this ?? Please help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

翻了热茶 2024-12-24 15:53:52

对于非重复随机数问题,有以下三种通用解决方案:

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

  2. 如果您想要小范围内的大量数字,请将所​​有数字放入一个数组中,然后对数组进行打乱。 Fisher-Yates 算法 是数组混洗的标准。从打乱后的数组中按顺序取出随机数。

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

There are three general solutions to the non-duplicate random number problem:

  1. If you want a few numbers from a large range then pick one and reject it if it is a duplicate. If the range is large, then this won't cause too many repeated attempts. This is what you mention above.

  2. If you want a lot of numbers from a small range, then set out all the numbers in an array and shuffle the array. The Fisher-Yates algorithm is standard for array shuffling. Take the random numbers in sequence from the shuffled array.

  3. If you want a lot of numbers from a large range then use an appropriately sized encryption algorithm. E.g. for 64 bit numbers use DES and encrypt 0, 1, 2, 3, ... in sequence. The output is guaranteed unique because encryption is reversible. The Hasty Pudding Cipher can be set for any convenient range of numbers.

白昼 2024-12-24 15:53:52

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

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

使用任何哈希算法(如 SHA1 或 MD5)获得良好的伪随机数

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

为了使其完全唯一,您可以将随机数与该条目的唯一 id 结合起来入口。

例如。您有 100 个具有唯一 id 1 到 100 的条目。要为第 100 个条目获取唯一的随机数,请生成一个随机数(例如 1129642347)并将其与唯一 id 100 组合在一起。作为一种简单的方法,您可以使用连接。那么随机数就变成1129642347100

What is you requirement? I guess you need to generate unique random number.

Step 2 in your case may take long time depending on the number of entries.

to get a good pseudo random number using any of the hashing algorithms like SHA1 or MD5

Here also there is a rare possibility that two entries can have same random number

To make it completely unique, you can club the random number with a unique id of the entry.

for eg. you have 100 entries with unique ids 1 to 100. to get a unique random number for 100th entry, Generate a random number say 1129642347 and club it with the unique id 100. As a simple method you can use concatenating. Then the random number becomes 1129642347100

潦草背影 2024-12-24 15:53:52

卢克(LukeH)在这里说得有道理。信用卡号码不是随机的,它们只是根据 Luhn 算法 有效的号码。
卡内的号码(3位或4位安全码)应为随机数。

LukeH have a point here. Credit card numbers are not random, they just numbers that are valid against the Luhn algorithm.
The number back in the card (the security code number with 3 or 4 digits) should be a random number.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文