[英]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.