Utan att använda mer entropi, uniqid
gör i princip följande (se källa till uniqid.c
):
$time = explode(' ', microtime(false));
return sprintf('%s%08x%05x', $prefix, $time[1], $time[0] * 1000000);
Så det tar i princip den aktuella tiden i mikrosekunder och förvandlar dem till en hexadecimal representation och lägger till den till prefixet. Detta ger redan unika värden.
Men värdena är inte helt slumpmässiga. För att få fler slumpmässiga värden bör du lägga till mer entropi genom att ställa in den andra parametern more_entropy . I så fall PHP:s interna linjär kongruentialgenerator
php_combined_lcg
(se källa till lgc.c
) används för att generera ett pseudoslumptal som är fäst i slutet, och lägger till cirka 30 bitar av ytterligare entropi för att göra dem mer slumpmässiga.