"Kleiner" Denkfehler: Die Reserve für einen Zufallswert beträgt
- NICHT: PHP_INT_MAX / hexdec("fffffffffffff")
- SONDERN: PHP_INT_MAX - hexdec("fffffffffffff")
also 9218868437227405312
Die um einen nunmehr brauchbaren Zufallswert verbesserte numerische uid (nicht: uuid!) kann man also so bilden:
$betterUID = hexdec( uniqid( "", true ) ) +
+ random_int (
0 ,
( PHP_INT_MAX - hexdec( "fffffffffffff" )
)
);
Jetzt könnte man die Frage stellen, ob man nicht einfacher gleich:
$otherUID = random_int( 0, PHP_INT_MAX );
benutzt. Aber, jedenfalls jenseits der Warnungen zum zeitbasiertem uniqid() schließt eben die Methode mit uniqid() jedenfalls halbwegs gut eine Wiederholung aus, weil die Summe nicht kleiner werden kann als der zeitstempelbasierte Ansatz.
Bis das nicht mehr gilt vergehen wohl genug Jahre und bis dahin haben wir ganz andere Gültigkeitsbereiche.