Pourquoi la fonction uniqid des PHP renvoie-t-elle seulement 13 chiffres et pas 14?
uniqid()
fonction renvoie un 13 chiffres nombre hexadécimal. Selon le spec dans php.net sitela fonction utilise microtime
à générer de la valeur unique.
Mais microtime
renvoie des nombres dans un format de chaîne comme la suivante:
"0.70352700 12689396875"
qui sont essentiellement les microsecondes et les secondes écoulées depuis 1970.
C'est un 9+11 chiffres nombre décimal.
De la conversion d'un 20 nombre décimal en hexadécimal le résultat serait une 16 chiffres hexadécimaux PAS un 13 chiffres.
J'ai aussi pensé à prendre la "0." la partie qui semblent ne jamais changer, et les deux derniers chiffres de l'microsec partie qui semblent rester toujours "00". Le nombre décimal serait seulement 9+11-3 chiffres, mais encore un nombre décimal de 17 chiffres, convertie en hexadécimal le résultat serait de 14 chiffres nombre hexadécimal PAS 13.
JE NE SUIS PAS INTÉRESSÉ À OBTENIR UN ID UNIQUE PAR UN AUTRE MOYEN OU UN PLUS LONG/COURT D'ID UNIQUE! Je SUIS le SEUL à vous DEMANDER SI QUELQU'un SAIT POURQUOI uniqid RETOURNE UNIQUEMENT les 13 CHIFFRES.
Il semble nosense: si uniqid
retourne un chiffre inférieur à microtime
cela signifie que microtime
donne des résultats plus unique de ceux retournés par uniqid
.
source d'informationauteur Marco Demaio
Vous devez vous connecter pour publier un commentaire.
Trouvé ceci sur http://www.php.net/manual/en/function.uniqid.php#95001
Fait sens pour moi. Commentaire si vous avez besoin d'une explication
Je pense que le nombre généré par
uniqid
est basé sur l'heure actuelle en microsecondes -- mais ce n'est pas que de temps : le calcul est probablement un peu plus difficile que vous le pensez.Encore, si vous avez besoin de plus de 13 chiffres, vous pouvez passer
true
comme un deuxième paramètre àuniqid
pour avoir plus d'entropie -- et il vous donnera une chaîne de caractères 23 longs.Par exemple, avec cette portion de code :
Je viens de recevoir :
Pour un 32 caractères IDENTIFIANT unique essayez ceci:
De raccourcir il suffit d'utiliser substr():
Par le manuel PHP la valeur par Défaut est de 13 $more_entropy définie sur true, il sera de 23 ans, mais vous pourrez toujours retrouver avec un Timestamp Unix.
J'utilise souvent
$uid = md5( uniqid() );
Mise à jour:
Maintenant, cela vous donnera de 32 caractères avec un minimum de chances de collision est cette vie.