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.