Uden at bruge mere entropi, uniqid
gør grundlæggende følgende (se kilde til uniqid.c
):
$time = explode(' ', microtime(false));
return sprintf('%s%08x%05x', $prefix, $time[1], $time[0] * 1000000);
Så det tager dybest set den aktuelle tid i mikrosekunder og gør dem til en hexadecimal repræsentation og tilføjer den til præfikset. Dette giver allerede unikke værdier.
Men værdierne er ikke helt tilfældige. For at få flere tilfældige værdier bør du tilføje mere entropi ved at indstille den anden parameter more_entropy . I så fald PHPs interne lineær kongruentialgenerator
php_combined_lcg
(se kilde til lgc.c
) bruges til at generere et pseudo-tilfældigt tal, der er vedhæftet i slutningen, og tilføjer ca. 30 bits ekstra entropi for at gøre dem mere tilfældige.