这个问题实际上并不是寻找解决方案的问题,而仅仅是出于好奇。PHP uniqid函数具有一个更熵的标志,以使输出“更唯一”。这让我想知道,当more_entropy为true时(而不是true时),此函数多次产生相同结果的可能性有多大。换句话说,启用more_entropy时与禁用时相比,uniqid的唯一性如何?始终启用more_entropy是否有任何弊端?
2014年3月更新:
首先,必须注意这uniqid是一个误称,因为它不能保证唯一的ID。
uniqid
根据PHP文档:
警告! 此函数不会创建随机或不可预测的字符串。不得出于安全目的使用此功能。使用加密安全的随机函数/生成器和加密安全的哈希函数来创建不可预测的安全ID。
警告!
此函数不会创建随机或不可预测的字符串。不得出于安全目的使用此功能。使用加密安全的随机函数/生成器和加密安全的哈希函数来创建不可预测的安全ID。
和
此函数不会生成加密安全的令牌,实际上,如果未传递任何其他参数,则返回值与microtime()几乎没有什么不同。如果您需要生成加密安全的令牌,请使用openssl_random_pseudo_bytes()。
根据文档,将更多熵设置为true会生成更多唯一值,但是执行时间更长(尽管程度很小):
如果设置为TRUE,则uniqid()将在返回值的末尾添加附加熵(使用组合线性同余生成器),这将增加结果唯一的可能性。
请注意这行increases the likelihood that the result will be unique,并非那会 保证 唯一性。
increases the likelihood that the result will be unique
您可以“无限地”争取唯一性,并使用任意数量的加密例程,添加盐等来增强它- 这取决于目的。
我建议您查看有关主要PHP主题的评论,尤其是:
http://www.php.net/manual/zh/function.uniqid.php#96898
http://www.php.net/manual/zh/function.uniqid.php#96549
http://www.php.net/manual/zh/function.uniqid.php#95001
我的建议是弄清楚 为什么 需要唯一性,这是出于安全性(即添加到加密/加扰例程)吗?另外,它需要 有多 独特?最后,看一下速度注意事项。适应性将随着基本注意事项而变化。