我想知道什么是最好的。 性能,速度和独特的最佳结果
答案 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。