首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪一个会更独特?

哪一个会更独特?
EN

Stack Overflow用户
提问于 2016-01-27 14:31:13
回答 3查看 51关注 0票数 1

我需要一个16位数字的唯一号码。

我可以使用下面的两个例子,哪一个会产生更多的唯一数字?

代码语言:javascript
复制
<?php>
$a=rand(1000000000000000,9999999999999999);
$b=rand(1000,9999).rand(1000,9999).rand(1000,9999).rand(1000,9999);
echo($a);
echo($b);
?>
EN

回答 3

Stack Overflow用户

发布于 2016-01-27 14:43:46

第一个将生成更多的随机数,因为它将允许在额外的3个点中使用"0“,而第二个不允许。

票数 1
EN

Stack Overflow用户

发布于 2016-01-27 14:45:57

代码语言:javascript
复制
$a=rand(1000000000000000,9999999999999999);

在1000000000000000到9999999999999999的范围内创建一个数字,这使得899999999999999999可能的数字总数为

代码语言:javascript
复制
$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位数字:

代码语言:javascript
复制
$c = sprintf('%016d',rand(0,9999999999999999));
票数 1
EN

Stack Overflow用户

发布于 2016-01-27 15:05:29

$a更具随机性,因为除了前面1的位置外,它可以全部为零-而$b则不能。

但这不是我要说的

您的$b语句表明您的随机数完全可以是字符串。

那么,为什么不通过填充0来扩展范围,使其仍然是16位数呢?

代码语言:javascript
复制
$a = str_pad(rand(0,9999999999999999), 16, "0", STR_PAD_LEFT);

这里有额外的1000000000000000种可能性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35030274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档