Cinq façons de générer des mots de passe aléatoires en php

墨辰丷
Libérer: 2023-03-30 12:54:01
original
5550 Les gens l'ont consulté

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;
}
Copier après la connexion

// Appelez cette fonction et passez le paramètre de longueur $pw_length = 6

echo create_password(6);
Copier après la connexion

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 = &#39;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<>~`+=,.;:/?|&#39;;

 $password = &#39;&#39;;
 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;
}
Copier après la connexion

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

< du tableau $chars via array_rand() 🎜> 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(&#39;a&#39;, &#39;b&#39;, &#39;c&#39;, &#39;d&#39;, &#39;e&#39;, &#39;f&#39;, &#39;g&#39;, &#39;h&#39;, 
 &#39;i&#39;, &#39;j&#39;, &#39;k&#39;, &#39;l&#39;,&#39;m&#39;, &#39;n&#39;, &#39;o&#39;, &#39;p&#39;, &#39;q&#39;, &#39;r&#39;, &#39;s&#39;, 
 &#39;t&#39;, &#39;u&#39;, &#39;v&#39;, &#39;w&#39;, &#39;x&#39;, &#39;y&#39;,&#39;z&#39;, &#39;A&#39;, &#39;B&#39;, &#39;C&#39;, &#39;D&#39;, 
 &#39;E&#39;, &#39;F&#39;, &#39;G&#39;, &#39;H&#39;, &#39;I&#39;, &#39;J&#39;, &#39;K&#39;, &#39;L&#39;,&#39;M&#39;, &#39;N&#39;, &#39;O&#39;, 
 &#39;P&#39;, &#39;Q&#39;, &#39;R&#39;, &#39;S&#39;, &#39;T&#39;, &#39;U&#39;, &#39;V&#39;, &#39;W&#39;, &#39;X&#39;, &#39;Y&#39;,&#39;Z&#39;, 
 &#39;0&#39;, &#39;1&#39;, &#39;2&#39;, &#39;3&#39;, &#39;4&#39;, &#39;5&#39;, &#39;6&#39;, &#39;7&#39;, &#39;8&#39;, &#39;9&#39;, &#39;!&#39;, 
 &#39;@&#39;,&#39;#&#39;, &#39;$&#39;, &#39;%&#39;, &#39;^&#39;, &#39;&&#39;, &#39;*&#39;, &#39;(&#39;, &#39;)&#39;, &#39;-&#39;, &#39;_&#39;, 
 &#39;[&#39;, &#39;]&#39;, &#39;{&#39;, &#39;}&#39;, &#39;<&#39;, &#39;>&#39;, &#39;~&#39;, &#39;`&#39;, &#39;+&#39;, &#39;=&#39;, &#39;,&#39;, 
 &#39;.&#39;, &#39;;&#39;, &#39;:&#39;, &#39;/&#39;, &#39;?&#39;, &#39;|&#39;);
 // 在 $chars 中随机取 $length 个数组元素键名
 $keys = array_rand($chars, $length); 
 $password = &#39;&#39;;
 for($i = 0; $i < $length; $i++)
 {
  // 将 $length 个数组元素连接成字符串
  $password .= $chars[$keys[$i]];
 }
 return $password;
}
Copier après la connexion

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;
}
Copier après la connexion

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";
?>
Copier après la connexion

Méthode 5 :

function rand_string($len = 16, $keyword = &#39;&#39;) {
 if (strlen($keyword) > $len) {//关键字不能比总长度长
  return false;
 }
 $str = &#39;&#39;;
 $chars = &#39;abcdefghijkmnpqrstuvwxyz23456789ABCDEFGHIJKMNPQRSTUVWXYZ&#39;; //去掉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
?>
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal