具有更多熵的 uniqid() 创建副本有多容易?

How easily will uniqid() with more entropy create a duplicate?

这可能是一个题外话,但我希望有人能回答这个问题。

具有更多熵的 uniqid() 运行 每多少纳秒、毫秒或秒就有创建重复项的风险?

参考下文link,如果在一毫秒内创建两个id,uniqid会发生冲突。如果熵更多呢?

(我的目标是在创建时使用一个小的可索引字母数字字符串作为文档 ID,它可以在没有数据库干扰的情况下以最小的处理器能力快速创建。)

这里的答案似乎没有提供任何确切的数字: How unique is uniqid?

来自source code, more_entropy adds nine random decimal digits, so you can expect a collision after 37,000 or so calls. (For how a billion turned into 37,000, see the birthday attack.) That of course ignores the fact that these digits are not actually random but generated by an LCG,并且代码中其他地方可能使用了相同的LCG,因此实际发生碰撞的可能性可能更高(具体是多少,我不知道)。

还值得注意的是,uniqid 实际上并不能保证微秒分辨率,因为一些 PHP 实现(Windows,特别是)无法访问微秒精度时钟。

简而言之,如果您需要为任何安全敏感的内容提供唯一 ID,或者冲突代价高昂,请避免 uniqid。否则,将它与 more_entropy 一起使用可能没问题(尽管常见的模式是使用 uniqid(mt_rand(), true) 来添加更多额外的熵)。