uniqid versus mt_rand PHP function


uniqid versus mt_rand PHP function

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

只需自己计时即可查看性能/速度:

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:

应该使结果更加独特。

根据文件。

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

我想mt_rand()会更慢,因为它会生成一个随机值,尽管我还没有对此进行测试。优点是更难猜测别人的随机值是什么,所以你可以在安全性依赖它的情况下使用它。这很可能还需要根据当前值进行测试,以确保不存在重复。像中彩票一样,机会非常渺茫,但这并不是不可能的。