Bez použití větší entropie, uniqid
dělá v zásadě následující (viz zdroj uniqid.c
):
$time = explode(' ', microtime(false));
return sprintf('%s%08x%05x', $prefix, $time[1], $time[0] * 1000000);
Takže v podstatě vezme aktuální čas v mikrosekundách a převede je do šestnáctkové reprezentace a připojí ji k předponě. To již poskytuje jedinečné hodnoty.
Hodnoty ale nejsou zcela náhodné. Chcete-li získat více náhodných hodnot, měli byste přidat více entropie nastavením druhého parametru more_entropy . V takovém případě interní lineární generátor kongruenci
PHP php_combined_lcg
(viz zdroj lgc.c
) se používá ke generování pseudonáhodného čísla, které je připojeno na konec a přidává přibližně 30 bitů dodatečné entropie, aby byly náhodnější.