[英]Does mt_rand() generate same number twice?
我正在尝试生成唯一的令牌ID,我可以使用mt_rand()
吗?
mt_rand()
生成两次相同的数字吗?
这是我第一次用漫画来回答问题,只是因为这是正确的答案:
mt_rand
将两次生成相同的数字,是的。 每个随机数生成器最终都可能会这样做。 (理论上)每次生成器运行时,每个数字都有相同的生成机会。 它可以连续多次随机生成相同的数字。 这是随机的。
要将随机数生成器用于唯一ID,两次生成相同数字的概率必须非常低,以至于在实践中不相关。 在这方面, mt_rand
可能还不够。 随机生成的唯一ID的概念已正式化为UUID ,您应该将其用于通用唯一ID的确切目的。
以这个报价 :
...仅在接下来的100年中每秒生成10亿个UUID之后,仅创建一个副本的可能性约为50%。
由于mt_rand
在32位系统上返回32位整数,因此它只能返回2 ^ 32个唯一值,这仅是4,294,967,296个唯一值。 如果您每秒生成十亿个mt_rand
值,则基本上可以保证在4秒后重复一次。 这有望说明UUID和mt_rand
之间的规模差异以及为什么如此重要。 即使每秒生成的ID少于10亿个ID,您仍然需要选择一种算法,该算法实际上使碰撞成为不可能,而不仅仅是不可能。
mt_rand()
将在每次调用时返回一个随机数。
但最终,它将返回已经返回给您的号码。 这是因为,除了与所需的随机性统计特性保持一致之外,生成器还具有有限的(尽管对于Mersenne Twister而言,这是非常大的) 周期性 。 如果这种行为是不受欢迎的,那么最好的选择就是使用该生成器来随机播放一个唯一的集合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.