- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想生成一个范围在 00000001 到 99999999 之间的唯一随机数序列。
所以第一个可能是 00001010,第二个可能是 40002928 等等
最简单的方法是生成一个随机数并将其存储在数据库中,然后每次都重复此操作并在数据库中检查该数字是否已存在,如果存在,则生成一个新的,再次检查,等等.但这看起来不对,如果生成的项目数量变大,我可能会重新生成一个数字可能 100 次。
有没有更聪明的方法?
编辑因为我总是忘记说为什么我想要这个,它可能会让事情变得更清楚,也许还有一个替代方案,它是:我们想为预订生成一个订单号,所以我们可以只使用 000001、000002 等。但是我们不想让竞争对手知道创建了多少订单(因为这不是一个高容量市场,而且我们不'想让他们知道我们是在 2 个月后的第 30 个订单还是第 100 个订单。所以我们想要一个随机的(但唯一的)订单号
最佳答案
您可以使用线性同余发生器 (LCG) 或线性反馈移位寄存器 (LFSR)。谷歌或维基百科了解更多信息。
两者都可以使用正确的参数在“完整周期”(或“完整周期”)的基础上运行,这样它们将在一个周期内仅生成一次“伪随机数”,并生成所有数字范围内。两者都是“弱”生成器,因此对密码学没有好处,但对于明显的随机性来说可能“足够好”。您可能必须将周期限制在您的“十进制”最大值内,因为“二进制”周期是必要的。
更新:我应该补充一点,没有必要以任何方式预先计算或预先存储以前的值,您只需要保留以前的种子值(单个整数)并计算下一个“按需”序列中的编号。当然,如果需要,您可以将一系列预先计算的数字保存到您的数据库中,但这不是必需的。
关于c# - 生成唯一随机数的聪明方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3627029/
Closed. This question is opinion-based。它当前不接受答案。
我知道如何创建和编写我自己的安装程序,但我需要在某些时候被重定向。这一点我肯定也会启发其他人。 我创建了一个安装项目。一切都完成了。 EXE 中的安装文件除外。 我知道有两种不同的方法: 在 EXE
重复 What is a PHP Framework?and many more 到目前为止,我一直在使用 PHP 进行小的调整,主要是使用 WordPress。什么是 PHP 框架?为什么我需要它们
我刚刚发现 String#split 有以下奇怪的行为: "a\tb c\nd".split => ["a", "b", "c", "d"] "a\tb c\nd".split(' ') => ["a
我是一名优秀的程序员,十分优秀!