我需要一个16位数字的唯一号码。
我可以使用下面的两个例子,哪一个会产生更多的唯一数字?
<?php>
$a=rand(1000000000000000,9999999999999999);
$b=rand(1000,9999).rand(1000,9999).rand(1000,9999).rand(1000,9999);
echo($a);
echo($b);
?>发布于 2016-01-27 14:43:46
第一个将生成更多的随机数,因为它将允许在额外的3个点中使用"0“,而第二个不允许。
发布于 2016-01-27 14:45:57
$a=rand(1000000000000000,9999999999999999);在1000000000000000到9999999999999999的范围内创建一个数字,这使得899999999999999999可能的数字总数为。
$b=rand(1000,9999).rand(1000,9999).rand(1000,9999).rand(1000,9999);创建从1000到9999的4个数字,总数为8999 * 8999 * 8999 * 8999 = 6558084485964001数字。
与第二种解决方案相比,第一种变化将产生大约37%的可能数字。
这将创建一个从0000000000000000到9999999999999999的随机16位数字:
$c = sprintf('%016d',rand(0,9999999999999999));发布于 2016-01-27 15:05:29
$a更具随机性,因为除了前面1的位置外,它可以全部为零-而$b则不能。
但这不是我要说的
您的$b语句表明您的随机数完全可以是字符串。
那么,为什么不通过填充0来扩展范围,使其仍然是16位数呢?
$a = str_pad(rand(0,9999999999999999), 16, "0", STR_PAD_LEFT);这里有额外的1000000000000000种可能性。
https://stackoverflow.com/questions/35030274
复制相似问题