ホームページ >php教程 >php手册 >PHP アプリケーション開発: ランダムな文字列を生成する方法

PHP アプリケーション開発: ランダムな文字列を生成する方法

WBOY
WBOYオリジナル
2016-06-21 08:55:02937ブラウズ

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 コード表を参照してください。chr (int $ascii) 関数が使用されます。対応する整数 $ascii を対応する文字に変換します。

方法 2

:

1. a – z、A – Z、0 – 9、およびいくつかの特殊文字を含む文字列 $chars をプリセットします

2. $chars 文字列からランダムに文字を選択します

function create_password($pw_length = 8)
{
    $randpwd = '';
    for ($i = 0; $i < $pw_length; $i++)
{
$randpwd .= chr(mt_rand(33, 126));
}
return $randpwd;
}

// 调用该函数,传递长度参数$pw_length = 6
echo create_password(6);

関数 create_password($pw_length = 8)
{
$randpwd = '';
for ($i = 0; $i <$pw_length; $i++)
{
$randpwd .= chr(mt_rand(33, 126));
}
return $randpwd;
}

// この関数を呼び出し、長さパラメータを渡します $pw_length = 6
echo create_password(6);

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. 2 番目のステップを n 回繰り返して、長さ n のパスワードを取得します<🎜> <🎜>

function generated_pa​​ssword( $length = 8 ) {
// パスワード文字セット、必要な文字を追加できます
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ [] {}<>~`+=,.;:/?';

$password = '';
for ( $i = 0; $i < $length; $i++ )
{
// // 文字を取得するには 2 つの方法があります
// 1 つ目は、substr を使用して $chars の任意の文字をインターセプトすることです; , strlen($chars) - 1), 1);
$password .= $chars[ mt_rand(0, strlen($chars) - 1) )
return $password;
}

<🎜>function generated_pa​​ssword( $length = 8 ) {
// パスワード文字セット、必要な文字を追加できます
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_ []{}<🎜>~`+=,.;:/?';<🎜> <🎜> $password = '';
for ( $i = 0; $i < $length; $i++ )
{
// 文字を取得するには 2 つの方法があります
//> //最初のものは、subststrを使用して$ chars;
$ chars、mt_rand(0、strlen($ chars)-1)、1);
$パスワードで挿入することです。 = $chars[ mt_rand(0, strlen($chars) - 1) 🎜> <🎜> $password を返す;
}<🎜>

時間効率の比較



次の PHP コードを使用して、6 桁のパスワードを生成するための上記 3 つのランダム パスワード生成関数の実行時間を計算し、その時間効率を簡単に比較します。

function make_password( $length = 8 )
{

// パスワード文字セット、必要な文字を追加できます

$chars = array('a', 'b', 'c' 、'd'、'e'、'f'、'g'、'h'、

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 = ($chars, $length);

    $password = '';
    for($i = 0; $i < $length; $i++)
{
// 将 $length 个数组元素连接成字符串
$password .= $chars[$keys[$i]];
}

return $password;
}

'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 '、'!'、

'@'、'#'、'$'、'%'、'^'、'&'、'*'、'('、')'、'-' 、' _'、

'['、']'、'{'、'}'、'<'、'>'、'~'、'`'、'+'、'='、 ', ',

'.', ';', ':', '/', '?', '');

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";
?>

// $chars 内の $length 配列要素のキー名をランダムに選択します $keys = ($chars, $length

); $password = ''; for($i = 0; $i < $length; $i++)

{

// $length の配列要素を文字列に連結します

$パスワード .= $chars[$keys[$i]];

}

return $password;

}

テーブル> 最終結果は : です。 方法 1: 9.8943710327148E-5 秒 方法 2: 9.6797943115234E-5 秒 方法 3: 0.00017499923706055 秒 メソッド 1 とメソッド 2 の実行時間はほぼ同じですが、メソッド 3 の実行時間はわずかに長いことがわかります。 原文: http://www.ludou.org/how-to-create-a-password-generator-using-php.html

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 秒";<🎜>?>

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。