uniqid()
函数返回一个13位长的十六进制数。根据spec in php.net site,函数使用microtime
来生成唯一值。为什么PHP的uniqid函数只返回13位而不是14?
microtime
但以字符串格式返回数字作为下列之一:
"0.70352700 12689396875"
它们基本上微秒和秒自1970年以来经过 这是一个9 + 11位十进制数。
将20十进制数转换为十六进制会导致16位十六进制数不是13位数。
我也想过拿出“0”。似乎永远不会改变的部分,以及似乎始终保持为“00”的微秒部分的最后两位数字。这样做的十进制数将只有9 + 11-3位长,但仍将导致14位十六进制数时转换为十六进制的17位的十进制数NOT 13.
我不感兴趣IN以另一种方式获取唯一ID或更长/更短的唯一ID!我只是问,如果有人知道为什么uniqid返回只有13个数字。
似乎nosense:如果低于microtime
uniqid
返回一个数字,它意味着microtime
给出的结果是更加独特的uniqid
返回者的。
你应该使用more_entropy选项,它给你一个更独特的结果。 – 2010-03-18 19:52:25
不需要更多独特的,我需要知道为什么结果只有13个字符长。无论如何感谢您的建议。 – 2010-03-18 19:55:45
microtime最显着的位并不经常。所以当你试图在彼此的几毫秒内产生两个独特的字符串时,它们是无用的。下一周的所有时间戳将从126开始。而且,如果您设法在相同的微秒内调用两次uniqid()(两个不同的线程或两个不同的服务器),您会发现其结果不会很独一无二。 – 2010-03-18 20:08:34