哪个会更独特?

时间:2016-01-27 06:31:13

标签: php unique

我需要一个16位数的唯一编号。
我可以使用以下2个例子,这会生成更多唯一编号吗?

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

3 个答案:

答案 0 :(得分:1)

第一个会生成更多的随机数,因为它会在3个额外的位置允许“0”而第二个不会。

答案 1 :(得分:1)

$a=rand(1000000000000000,9999999999999999);

创建一个数字,范围从1000000000000000到9999999999999999,总计 8999999999999999可能的数字

$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));

答案 2 :(得分:1)

$a更随机,因为它可以包含全部零,除了前一个1的位置 - 而$b不能。

但这不是我的观点

你的$ b语句表明你的随机数很可能是一个字符串。

那么为什么不通过填充零来扩展你的范围,使它仍然是16位?

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

此处还有1000亿可能性。