Dans le développement Web, il est souvent nécessaire de générer des caractères aléatoires non répétitifs, tels que des numéros de commande, des codes de vérification, etc. PHP est un langage de développement largement utilisé. Nous pouvons facilement utiliser PHP pour implémenter cette fonction. Cet article présentera comment générer des caractères uniques non répétitifs de 18 bits en PHP, ainsi que les algorithmes et techniques correspondants.
1. Utilisez des nombres aléatoires pour générer des caractères uniques
En php, nous pouvons utiliser la fonction rand() ou la fonction mt_rand() pour générer des nombres aléatoires. Cependant, les nombres aléatoires générés par cette méthode sont susceptibles de se répéter, certaines compétences sont donc nécessaires pour garantir que les caractères générés ne se répètent pas.
Ce qui suit est une méthode simple :
1. Définissez une chaîne vide $chars pour stocker les caractères générés
2. Chaque fois qu'un caractère aléatoire est généré, utilisez la fonction strpos() pour rechercher dans $chars ; le caractère existe déjà ; s'il existe déjà, régénérez un caractère aléatoire ;
3 Si le caractère aléatoire généré n'existe pas, ajoutez-le à la chaîne $chars.
Ce qui suit est un exemple de code :
function generateRandomString($length) { $chars = ""; while (strlen($chars) < $length) { $char = chr(mt_rand(65, 90)); // 生成65-90的随机数字 if (strpos($chars, $char) === false) { // 判断$char是否已经在$chars中出现过 $chars .= $char; } } return $chars; } echo generateRandomString(18);
Dans le code ci-dessus, nous utilisons la fonction mt_rand() pour générer un nombre aléatoire entre 65 et 90, puis utilisons la fonction chr() pour convertir ce nombre en le caractère correspondant. . Étant donné que la chaîne aléatoire générée peut être répétée, utilisez la fonction strpos() pour déterminer si le caractère existe déjà, répétez le processus de génération de caractères aléatoires et de recherche dans la boucle while jusqu'à ce que le nombre total de caractères générés atteigne la longueur définie, et résultat de retour.
2. Utilisez des horodatages et des nombres aléatoires pour générer des caractères uniques
La méthode ci-dessus peut déjà compléter la fonction de génération de caractères uniques, mais en raison de la nécessité de rechercher à plusieurs reprises les caractères générés, la puissance de calcul requise peut être relativement élevée. Dans les situations où l'accès simultané est élevé et le nombre de caractères générés est important, des problèmes de performances sont susceptibles de se produire.
Par conséquent, nous pouvons utiliser la méthode horodatage + nombre aléatoire pour générer des caractères uniques.
L'idée suivante est :
1. Générez un horodatage unique et convertissez-le en une chaîne hexadécimale ;
2 Générez une chaîne aléatoire de quatre chiffres et ajoutez-la à la chaîne d'horodatage. Devant, faites-en une longueur de 20 chiffres. ;
3. Utilisez la fonction substr() pour intercepter les 16 derniers chiffres de la chaîne d'horodatage en tant que caractères aléatoires générés.
Ce qui suit est un exemple de code :
function generateNonceStr($length = 18) { $timestamp = uniqid('', false); $nonce_str = substr($timestamp, 4) . substr(mt_rand(1000, 9999), 0, 4); return substr($nonce_str, -$length); } echo generateNonceStr();
Dans le code ci-dessus, nous générons d'abord une chaîne d'horodatage de 16 bits, la convertissons en une chaîne de 36 chiffres, puis générons une chaîne aléatoire de longueur spécifiée. Enfin, les deux chaînes sont concaténées et la fonction substr() est utilisée pour obtenir la sous-chaîne suivante de la longueur spécifiée, qui est le caractère non répétitif généré.
3. Résumé
Cet article présente deux méthodes de génération de caractères uniques, parmi lesquelles la méthode d'utilisation d'horodatages et de génération de nombres aléatoires est plus pratique et efficace. Pour des scénarios tels que la génération de numéros de commande dans des scénarios liés au paiement, des algorithmes et des règles plus complets doivent être utilisés pour garantir que les numéros de commande générés ne sont pas seulement non dupliqués, mais également pour éviter l'apparition de caractères ou de chiffres spécifiques, réduisant ainsi le risque de être attaqué.
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!