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.