2016-01-27 16 views
1

我需要一個16位唯一號碼。
我可以使用下面的兩個例子,它會生成更多獨特的數字嗎?哪個更獨特?

<?php> 
$a=rand(1000000000000000,9999999999999999); 
$b=rand(1000,9999).rand(1000,9999).rand(1000,9999).rand(1000,9999); 
echo($a); 
echo($b); 
?> 
+0

你爲什麼不測試不同的方法? – shapeshifter

+0

@Uchiha重要嗎? – shapeshifter

回答

1

第一會產生更多的隨機數僅僅是因爲它將使「0」在3個額外的點,所述第二不會。

+0

任何其他創建16位唯一ID的方法?只有數字應該在那裏。 –

+0

看我的答案中的解決方案c)。 – maxhb

1
$a=rand(1000000000000000,9999999999999999); 

創建範圍從千萬億到9999999999999999一個號碼,這使得共8999999999999999可能數目

$b=rand(1000,9999).rand(1000,9999).rand(1000,9999).rand(1000,9999); 

創建4個數字1000到9999,這使得總的8999 * 8999 * 8999 * 8999 = 6558084485964001號碼

與第二種解決方案相比,第一種變體可能會產生大約37%的可能數量。

這將創建一個隨機的16位數字從0000000000000000至9999999999999999:

$c = sprintf('%016d',rand(0,9999999999999999)); 
1

$a是更隨機它可具有全部爲零,除了在前述1的放置 - 而$b不能。

但是,這不是我的觀點

你$ B聲明中表明您的隨機數可以很好地爲一個字符串。

那麼爲什麼不擴大你的範圍填充零,使其仍然16位數字?

$a = str_pad(rand(0,9999999999999999), 16, "0", STR_PAD_LEFT); 

這裏還有額外的1000000000000000個可能性。

+0

我需要一個數字,最好不是一個字符串。 –

+0

另外它應該是一個16位的數字 –

+0

$ b在你的代碼中包含一個字符串。 –