Sin usar más entropía, uniqid
hace básicamente lo siguiente (ver fuente de uniqid.c
):
$time = explode(' ', microtime(false));
return sprintf('%s%08x%05x', $prefix, $time[1], $time[0] * 1000000);
Entonces, básicamente toma el tiempo actual en microsegundos y los convierte en una representación hexadecimal y la agrega al prefijo. Esto ya proporciona valores únicos.
Pero los valores no son del todo aleatorios. Para obtener más valores aleatorios, debe agregar más entropía configurando el segundo parámetro more_entropy . En ese caso, el generador congruencial lineal
interno de PHP php_combined_lcg
(ver fuente de lgc.c
) se usa para generar un número pseudoaleatorio que se adjunta al final, agregando alrededor de 30 bits de entropía adicional para hacerlos más aleatorios.