Bez używania większej entropii, uniqid
zasadniczo wykonuje następujące czynności (patrz źródło uniqid.c
):
$time = explode(' ', microtime(false));
return sprintf('%s%08x%05x', $prefix, $time[1], $time[0] * 1000000);
Więc w zasadzie zajmuje to bieżący czas w mikrosekundach i zamienia je w reprezentację szesnastkową i dołącza ją do przedrostka. To już zapewnia unikalne wartości.
Ale wartości nie są całkiem przypadkowe. Aby uzyskać więcej losowych wartości, należy dodać więcej entropii, ustawiając drugi parametr more_entropy . W takim przypadku wewnętrzny liniowy generator zgodności
php_combined_lcg
(patrz źródło lgc.c
) służy do generowania pseudolosowej liczby, która jest dołączona na końcu, dodając około 30 bitów dodatkowej entropii, aby uczynić je bardziej losowymi.