sql >> Base de Datos >  >> RDS >> Mysql

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

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.