PHP を使用してアプリケーション、特に Web サイト プログラムを開発するには、多くの場合、ランダムなパスワードを生成する必要があります。たとえば、ユーザー登録用にランダムなパスワードが生成され、ユーザーのリセット パスワードにもランダムなパスワードが必要になります。ランダムなパスワードは固定長の文字列です。ここでは、参考のためにランダムな文字列を生成するいくつかの方法を集めました。
方法 1:
1. 33 ~ 126 のランダムな整数 (35 など) を生成します。
2. 35 を対応する ASCII 文字に変換します (#
に対応する 35 など)。
3. 上記の手順 1 と 2 を n 回繰り返して、n 桁のパスワードに接続します
このアルゴリズムは主に 2 つの関数を使用します。mt_rand (int $min, int $max) 関数はランダムな整数を生成するために使用されます。$min – $max は ASCII コードの範囲であり、ここでは 33 ~ 126 です。必要に応じて使用できます。たとえば、ASCII コード表の 97 ~ 122 ビットは、英語の文字 a ~ z に対応します。詳しくは、ASCII コード表を参照してください。対応する整数 $ascii を対応する文字に変換する 具体的な関数 コードは次のとおりです:
function create_password($pw_length=8){ $randpwd=''; for($i=0;$i<$pw_length;$i++){ $randpwd.=chr(mt_rand(33,126)); } return $randpwd; }
使用方法は次のとおりです。ここでは、長さ 6 のランダムなパスワードが生成されます。
echo create_password(6);
方法 2:
1. a – z、A – Z、0 – 9、およびいくつかの特殊文字を含む文字列 $chars をプリセットします
2. $chars 文字列から文字 をランダムに選択します
3. 2 番目のステップを n 回繰り返して、長さ 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; }
方法 3:
1. a – z、A – Z、0 – 9、およびいくつかの特殊文字を含む文字配列 $chars をプリセットします
2. array_rand() を使用して、配列 $chars から $length 要素をランダムに選択します
3. 取得したキー名配列 $keys に従って、配列 $chars から文字を取り出し、文字列を連結します。この方法の欠点は、同じ文字が繰り返し取得されないことです。
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; }
方法 4:
1. time() は現在の Unix タイムスタンプを取得します
2. 最初のステップで取得したタイムスタンプを md5() で暗号化します
3. 2 番目のステップの暗号化結果を使用し、n 桁を傍受して目的のパスワード
を取得します。
function get_password($length=8){ $str=substr(md5(time()),0,6); return $str; }
時間効率の比較
以下の PHP コードを使用して、6 桁のパスワードを生成するための上記 4 つのランダム パスワード生成関数の実行時間を計算し、その時間効率を簡単に比較します。
<?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"; ?>
プログラムの実行時間を計算するための PHP クラス
最終結果は次のとおりです:
方法 1: 9.8943710327148E-5 秒
方法 2: 9.6797943115234E-5 秒
方法 3: 0.00017499923706055 秒
方法 4: 3.4093856811523E-5 秒