唯一性:`time()`Vs`mt_rand()`

时间:2011-11-27 13:29:42

标签: php time random php-5.3

在php中生成唯一编号时,我始终无法确定这一点。

time()mt_rand()更独特吗?

time()似乎对我来说更独特,因为时间日期不能重复两次。

mt_rand()我不确定php默认的唯一整数提供 - 是否会及时重复一个唯一的整数?

4 个答案:

答案 0 :(得分:2)

您考虑过uniqid()吗?

另外,要回答你的实际问题:与time()不同,mt_rand肯定会最终重复一个数字。但是,如果您希望它是唯一的,则每秒只能使用time()

答案 1 :(得分:2)

如果你有很多用户一次性使用time(),你可能会在同一秒内发生两件事,从而使time()不像{{1}那样独特}。使用mt_rand(),您几乎保证获得独特的结果,但您可能不会。

另一种解决方案是使用microtime()返回当前时间(以微秒为单位),这将为您提供唯一的标记,因为在同一微秒中发生事件会非常特别。您还可以考虑uniqid()从当前时间生成ID(以微秒为单位)(最有可能在内部使用mt_rand()

答案 2 :(得分:2)

mt_rand可以生成相同的值两次但你可以想到它的概率,其中time返回自unix epoch以来的秒数并且不能重复两次。但它每秒都会改变,这意味着如果在一秒钟内调用多次,它将返回相同的结果,其中mt_rand可能会返回不同的值。

答案 3 :(得分:1)

使用time()通常不是唯一ID的好主意,原因如下:

  1. 不同的操作系统可以有不同的时间分辨率,因此您可能会得到两个完全相同的连续ID
  2. 可能无关紧要,但猜测基于时间的ID
  3. 要容易得多
相关问题