我想生成 00000001 到 99999999 范围内的唯一随机数序列。
所以第一个可能是 00001010,第二个可能是 40002928 等等。
最简单的方法是生成一个随机数并将其存储在数据库中,下次再执行一次并检查数据库中该数字是否已存在,如果存在,则生成一个新的,然后再次检查,等等。
但这看起来不对,如果生成的项目数量变大,我可能会重新生成一个数字可能 100 次。
有更聪明的方法吗?
编辑
总是我忘了说为什么我想要这个,它可能会让事情变得更清楚,也许会得到一个替代方案,它是:
我们想为预订生成一个订单号,因此我们可以只使用 000001、000002 等。但我们不想让竞争对手知道创建了多少订单(因为这不是一个高容量市场,而且我们不知道)不想让他们知道我们是在 2 个月后收到订单 30 还是收到订单 100。因此,我们希望有一个随机(但唯一)的订单号
您可以使用线性同余发生器 (LCG) 或线性反馈移位寄存器 (LFSR)。谷歌或维基百科了解更多信息。
两者都可以通过正确的参数在“全周期”(或“全周期”)基础上运行,以便它们在单个周期内仅生成一次“伪随机数”,并生成该范围内的所有数字。两者都是“弱”生成器,因此对密码学没有好处,但对于明显的随机性来说可能“足够好”。您可能必须将工作周期限制在“十进制”最大值内,因为“二进制”周期是必要的。
更新:我应该补充一点,没有必要以任何方式预先计算或预先存储以前的值,您只需要保留以前的种子值(单个整数)并“按需”计算中的下一个数字顺序。当然,如果需要,您可以将一系列预先计算的数字保存到数据库中,但这不是必需的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)