Mysql
 sql >> Database >  >> RDS >> Mysql

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

Senza utilizzare più entropia, uniqid fa sostanzialmente quanto segue (vedi fonte di uniqid.c ):

$time = explode(' ', microtime(false));
return sprintf('%s%08x%05x', $prefix, $time[1], $time[0] * 1000000);

Quindi fondamentalmente prende l'ora corrente in microsecondi e li trasforma in una rappresentazione esadecimale e la aggiunge al prefisso. Questo fornisce già valori univoci.

Ma i valori non sono del tutto casuali. Per ottenere più valori casuali, dovresti aggiungere più entropia impostando il secondo parametro more_entropy . In tal caso, il generatore congruenziale lineare interno di PHP php_combined_lcg (vedi fonte di lgc.c ) viene utilizzato per generare un numero pseudocasuale che viene allegato alla fine, aggiungendo circa 30 bit di entropia aggiuntivi per renderli più casuali.