Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PHP - uniqid(,true) versus uniqid()+mt_rand()


Sem usar mais entropia, uniqid faz basicamente o seguinte (veja fonte de uniqid.c ):
$time = explode(' ', microtime(false));
return sprintf('%s%08x%05x', $prefix, $time[1], $time[0] * 1000000);

Então, basicamente, ele pega o tempo atual em microssegundos e os transforma em uma representação hexadecimal e o anexa ao prefixo. Isso já fornece valores exclusivos.

Mas os valores não são bem aleatórios. Para obter mais valores aleatórios, você deve adicionar mais entropia definindo o segundo parâmetro more_entropy . Nesse caso, o gerador de congruência linear interno do PHP php_combined_lcg (veja fonte de lgc.c ) é usado para gerar um número pseudo-aleatório que é anexado no final, adicionando cerca de 30 bits de entropia adicional para torná-los mais aleatórios.