uniqid与mt_rand PHP函数

时间:2012-02-05 20:12:56

标签: php performance function random

我想知道什么是最好的。 性能,速度和独特的最佳结果

2 个答案:

答案 0 :(得分:2)

uniqueid('',true)只是一个十六进制形式的时间戳,因此只要你不在同一个微秒内生成两个,它们总是会有所不同。请记住,由于某些原因,将更多熵设置为true会更快,这包括微秒,因此它更有可能成为真正独特的。它的问题在于它比mt_rand()值更容易猜到,因为它基于当前时间,所以你不希望在安全性依赖于唯一值的地方使用它。

mt_rand()我猜它会变慢,因为它会生成一个随机值,虽然我没有把它放到测试中。优点是猜测某个人的随机价值是多么困难,所以你可以在安全依赖它的情况下切实使用它。这很可能还需要针对当前值进行测试,以确保不存在重复。赢得彩票的机会非常渺茫,但并非超出了可能性范围。

答案 1 :(得分:1)

自己动手看看性能/速度:

define( 'NUM_TESTS', 1000000);

$start = microtime( true);

for( $i = 0; $i < NUM_TESTS; $i++)
{
    mt_rand();
}

$end = microtime(true) - $start;
echo 'mt_rand: ' . $end . "\n";

$start = microtime( true);

for( $i = 0; $i < NUM_TESTS; $i++)
{
    uniqid();
}

$end = microtime(true) - $start;
echo 'uniqid: ' . $end . "\n";

就唯一性而言,mt_rand会返回一个数字,而uniqid会返回一个随机字符串,该字符串的组合可能比mt_rand多得多。此外,uniqid还有一个参数:

string uniqid ([ string $prefix = "" [, bool $more_entropy = false ]] )

设置$ more_entropy = true:

  

应该使结果更加独特。

根据the docs