2011-06-08 50 views
2

有誰知道使用PHP生成隨機64位數的簡單方法嗎?如果可能的話,最好不要依賴任何擴展。PHP 64位隨機數

+0

也許這個鏈接可以幫助 - http://stackoverflow.com/questions/4523343/how-do-you-generate-a-random-number-over-the-32bit-limit-in-php – lethalMango 2011-06-08 21:34:04

回答

3

使用mt_rand生成一串較小的(16位)隨機數並將它們組合。此方法也用於php.net上的this UUID示例。

+0

這似乎工作。雖然,當我使用'base_convert'轉換它時,它太大了?我認爲這可能是該功能的精度問題? – 2011-06-10 07:21:56

4

從/ dev/urandom或某些等效源提取8個隨機字節。

+0

怎麼樣?可以在這個答案上多用一點 – Ascherer 2011-06-08 21:56:16

+1

這是一個文件...'$ fp = fopen('/ dev/urandom'); fread($ fp,8); fclose($ fp);' – 2011-06-08 22:09:58

+1

或者嘗試:'$ rnd = file_get_contents('/ dev/urandom',false,null,0,8);' – hakre 2011-06-09 02:42:30

3

This?

rand(0, 18446744073709551615) 

the php documentation

在某些平臺上(如Windows),getrandmax()只有32768。如果您需要的時間範圍超過32768時,指定的最小值和最大值將允許您創建範圍大於此值,或者考慮使用mt_rand()來代替。

+0

這也適用於'mt_rand',但它只返回不同於0表示比上面給出的更小的數字。 – likeitlikeit 2014-03-27 11:52:31

+0

這給出了「警告:rand()期望參數2是整數,浮點數在PHP 7上給出 - 」。 – 2015-07-24 18:15:59

+0

此外,結果可能不是均勻分佈的:https://bugs.php.net/bug .php?id = 63174#1437000589 – 2015-07-24 18:16:36

0
$rand64bit = rand() << 32 | rand();