Maison >développement back-end >tutoriel php >Cinq façons de générer des mots de passe aléatoires en php
Cet article présente principalement cinq méthodes pour générer des mots de passe aléatoires en PHP. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
L'utilisation de PHP pour développer des applications, en particulier des programmes de sites Web, nécessite souvent de générer des mots de passe aléatoires. Par exemple, un mot de passe aléatoire est généré pour l'enregistrement de l'utilisateur, et un mot de passe aléatoire est également requis pour la réinitialisation du mot de passe de l'utilisateur. Un mot de passe aléatoire est une chaîne de longueur fixe. J'ai rassemblé ici plusieurs méthodes pour générer des chaînes aléatoires pour votre référence.
Méthode 1 :
1. Générer un entier aléatoire de 33 à 126, tel que 35,
2. Convertir 35 en ASCII correspondant caractères de code, tels que 35 correspond à #
3. Répétez les étapes ci-dessus 1 et 2 n fois pour vous connecter à un mot de passe à n chiffres
Cet algorithme utilise principalement deux fonctions, mt_rand ( int La fonction $ min, int $max) est utilisée pour générer des entiers aléatoires, où $min – $max est la plage du code ASCII, ici c'est 33-126, la plage peut être ajustée selon les besoins, par exemple, 97 – 122 bits dans la table de codes ASCII correspondent aux lettres anglaises a – z, veuillez vous référer à la table de codes ASCII pour plus de détails ; la fonction chr (int $ascii) est utilisée pour convertir l'entier $ascii correspondant en caractères correspondants.
function create_password($pw_length = 8) { $randpwd = ''; for ($i = 0; $i < $pw_length; $i++) { $randpwd .= chr(mt_rand(33, 126)); } return $randpwd; }
// Appelez cette fonction et passez le paramètre de longueur $pw_length = 6
echo create_password(6);
Méthode 2 :
1. Préréglez une chaîne $chars, comprenant a – z, A – Z, 0 – 9 et quelques caractères spéciaux
2. Choisissez au hasard un caractère dans la chaîne $chars
3. Répétez la deuxième étape n fois pour obtenir un mot de passe de longueur n
function generate_password( $length = 8 ) { // 密码字符集,可任意添加你需要的字符 $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<>~`+=,.;:/?|'; $password = ''; for ( $i = 0; $i < $length; $i++ ) { // 这里提供两种字符获取方式 // 第一种是使用 substr 截取$chars中的任意一位字符; // 第二种是取字符数组 $chars 的任意元素 // $password .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); $password .= $chars[ mt_rand(0, strlen($chars) - 1) ]; } return $password; }
Méthode 3 :
1. Préréglez un tableau de caractères $chars, y compris a – z, A – Z, 0 – 9 et quelques caractères spéciaux
2. Sélectionnez au hasard les éléments $length
3. Selon les résultats obtenus tableau de noms de clé $keys, supprimez les caractères du tableau $chars et concaténez la chaîne. L’inconvénient de cette méthode est que les mêmes caractères ne seront pas récupérés de manière répétée.function make_password( $length = 8 ) { // 密码字符集,可任意添加你需要的字符 $chars = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l','m', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y','z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L','M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y','Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '!', '@','#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '[', ']', '{', '}', '<', '>', '~', '`', '+', '=', ',', '.', ';', ':', '/', '?', '|'); // 在 $chars 中随机取 $length 个数组元素键名 $keys = array_rand($chars, $length); $password = ''; for($i = 0; $i < $length; $i++) { // 将 $length 个数组元素连接成字符串 $password .= $chars[$keys[$i]]; } return $password; }
Méthode 4 :
Cette méthode est une nouvelle méthode fournie par un internaute après que cet article a été réimprimé par Blue Ideal. L'algorithme est simple et le code. est court. Juste à cause de la valeur de retour de la fonction md5(), le mot de passe généré ne comprend que des lettres et des chiffres, mais c'est toujours une bonne méthode. Idée d'algorithme : 1. time() obtient l'horodatage Unix actuel 2. Crypter l'horodatage obtenu à la première étape avec md5() 3. Le résultat de la deuxième étape du cryptage, intercepter n chiffres pour obtenir le mot de passe souhaitéfunction get_password( $length = 8 ) { $str = substr(md5(time()), 0, 6); return $str; }
Comparaison de l'efficacité du temps
Nous utilisons le code PHP suivant pour calculer ce qui précède 4 Le temps d'exécution d'une fonction de génération de mot de passe aléatoire pour générer un mot de passe à 6 chiffres, puis faire une comparaison simple de leur efficacité temporelle.<?php function getmicrotime() { list($usec, $sec) = explode(" ",microtime()); return ((float)$usec + (float)$sec); } // 记录开始时间 $time_start = getmicrotime(); // 这里放要执行的PHP代码,如: // echo create_password(6); // 记录结束时间 $time_end = getmicrotime(); $time = $time_end - $time_start; // 输出运行总时间 echo "执行时间 $time seconds"; ?>
Méthode 5 :
function rand_string($len = 16, $keyword = '') { if (strlen($keyword) > $len) {//关键字不能比总长度长 return false; } $str = ''; $chars = 'abcdefghijkmnpqrstuvwxyz23456789ABCDEFGHIJKMNPQRSTUVWXYZ'; //去掉1跟字母l防混淆 if ($len > strlen($chars)) {//位数过长重复字符串一定次数 $chars = str_repeat($chars, ceil($len / strlen($chars))); } $chars = str_shuffle($chars); //打乱字符串 $str = substr($chars, 0, $len); if (!empty($keyword)) { $start = $len - strlen($keyword); $str = substr_replace($str, $keyword, mt_rand(0, $start), strlen($keyword)); //从随机位置插入关键字 } return $str; } echo rand_string(16,"ab"); //output example:V8bNY6SmkeywordB ?>
Le résultat final est :
Méthode 1 : 9.8943710327148 E- 5 secondes Deuxième méthode : 9,6797943115234E-5 secondes Troisième méthode : 0,00017499923706055 secondes Méthode quatre : 3,4093856811523E-5 secondes Oui, c'est possible On voit que le temps d'exécution de la première méthode et de la deuxième méthode est similaire, la quatrième méthode a la durée d'exécution la plus courte et la troisième méthode a une durée d'exécution légèrement plus longue.Résumé : Ce qui précède représente l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.
Recommandations associées :
Interprétation détaillée des fonctions de rappel PHP et des fonctions anonymes
Utilisation de Memcache en PHP base de données
Utilisation et analyse de la base de données PHP Redis
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!