Maison > Article > développement back-end > PHP génère un identifiant unique
Préface
La fonction PHP uniqid() peut être utilisée pour générer un identifiant unique qui n'est pas répété, qui est basé sur l'horodatage actuel en microsecondes. En cas de concurrence élevée ou d'intervalles extrêmement courts (comme le code de boucle), une grande quantité de données en double apparaîtra. Même si le deuxième paramètre est utilisé, il sera répété, et la meilleure solution est de combiner la fonction md5 pour générer un identifiant unique.
Utilisez la fonction
string uniqid ([ string $prefix = "" [, bool $more_entropy = false ]] )
pour obtenir un identifiant unique préfixé basé sur le nombre de microsecondes dans l'heure actuelle. préfixe Paramètres utiles. Par exemple : si sur plusieurs hôtes, un identifiant unique peut être généré dans la même microseconde. Si le préfixe est vide, la longueur de la chaîne renvoyée est 13. Si moreentropy est VRAI, la longueur de la chaîne renvoyée est 23. moreentropy Si défini sur TRUE, uniqid() ajoutera une entropie supplémentaire à la fin de la chaîne renvoyée (en utilisant un générateur congruentiel linéaire combiné). Rendre l'identifiant unique plus unique.
Cette méthode générera une grande quantité de données répétées L'exécution du code PHP suivant générera l'identifiant unique et l'élément correspondant. la valeur dans l’index du tableau est le nombre de fois que l’identifiant unique est répété.
<?php $units = array();for($i=0;$i<1000000;$i++){ $units[] = uniqid();} $values = array_count_values($units); $duplicates = [];foreach($values as $k=>$v){ if($v>1){ $duplicates[$k]=$v; }} echo '<pre class="brush:php;toolbar:false">';print_r($duplicates); echo '';?>
Cette méthode génère beaucoup moins d'identifiants uniques en double.
<?php $units = array();for($i=0;$i<1000000;$i++){ $units[] = uniqid('',true);} $values = array_count_values($units); $duplicates = [];foreach($values as $k=>$v){ if($v>1){ $duplicates[$k]=$v; }} echo '<pre class="brush:php;toolbar:false">';print_r($duplicates); echo '';?>
Il n'y a pas de duplication dans l'identifiant unique généré par cette méthode.
<?php $units = array();for($i=0;$i<1000000;$i++){ $units[]=md5(uniqid(md5(microtime(true)),true));} $values = array_count_values($units); $duplicates = [];foreach($values as $k=>$v){ if($v>1){ $duplicates[$k]=$v; }} echo '<pre class="brush:php;toolbar:false">';print_r($duplicates); echo '';?>
Utilisez la fonction sessioncreateid() pour générer un identifiant unique Après des tests réels, il a été constaté que même si sessioncreateid() est appelé 100. millions de fois en boucle, il n'y a eu aucune duplication. php sessioncreateid() est une nouvelle fonction de PHP 7.1, utilisée pour générer un identifiant de session. Elle ne peut pas être utilisée dans les versions inférieures.
Pour plus de connaissances sur PHP, veuillez visiter le Site Web PHP chinois !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!