Ohne mehr Entropie zu verwenden, uniqid
macht grundsätzlich folgendes (siehe Quelle von ). uniqid.c
):
$time = explode(' ', microtime(false));
return sprintf('%s%08x%05x', $prefix, $time[1], $time[0] * 1000000);
Es nimmt also im Grunde genommen die aktuelle Zeit in Mikrosekunden und wandelt sie in eine hexadezimale Darstellung um und hängt sie an das Präfix an. Dies liefert bereits eindeutige Werte.
Aber die Werte sind nicht ganz zufällig. Um mehr Zufallswerte zu erhalten, sollten Sie mehr Entropie hinzufügen, indem Sie den zweiten Parameter more_entropy setzen . In diesem Fall PHPs interner linearer Kongruenzgenerator
php_combined_lcg
(siehe Quelle von lgc.c
) wird verwendet, um eine Pseudo-Zufallszahl zu generieren, die am Ende angehängt wird und etwa 30 Bit zusätzliche Entropie hinzufügt, um sie zufälliger zu machen.