ランダムなパスワードや文字列を生成する方法を6つ紹介します。
1. str_shuffle() を使う
- 同じ文字が2回出ない
- 36文字まで生成可能
<?php
function random($length = 8)
{
return substr(str_shuffle('1234567890abcdefghijklmnopqrstuvwxyz'), 0, $length);
}
2. mt_rand() を使う
- 同じ文字が複数回でる可能性がある
- 12文字まで生成可能
<?php
function random($length = 8)
{
return base_convert(mt_rand(pow(36, $length - 1), pow(36, $length) - 1), 10, 36);
}
3. md5(uniqid()) を使う
- 同じ文字が複数回でる可能性がある
- 25文字まで生成可能
<?php
function random($length = 8)
{
return substr(base_convert(md5(uniqid()), 16, 36), 0, $length);
}
sha256にすることで48文字まで生成可能になる
<?php
function random($length = 8)
{
return substr(base_convert(hash('sha256', uniqid()), 16, 36), 0, $length);
}
4. array_reduce() を使う
- 同じ文字が複数回でる可能性がある
- 何文字でも生成可能
<?php
function random($length = 8)
{
return array_reduce(range(1, $length), function($p){ return $p.str_shuffle('1234567890abcdefghijklmnopqrstuvwxyz')[0]; });
}
5. opensslを使う
PHP - ランダムなパスワードを1行で生成する with openssl - Qiita
6. str_repeat + str_shuffle
- 同じ文字が複数回でる可能性がある
- 何文字でも生成可能
<?php
function random($length = 8)
{
return substr(str_shuffle(str_repeat('0123456789abcdefghijklmnopqrstuvwxyz', $length)), 0, $length);
}
参考: [PHP] 一行でランダムパスワードを得る方法 : してログ - LANDHERE
7. random_bytes
- PHP7で追加された暗号学的に安全なランダムバイト生成するrandom_bytes関数を使う。
- 同じ文字が複数回でる可能性がある
- 出現する文字は
0
-9
,a
-f
のみ - 何文字でも生成可能
function random($length = 8)
{
return substr(bin2hex(random_bytes($length)), 0, $length);
}
最後までお読みくださりありがとうございました。Twitterでは、Qiitaに書かない技術ネタなどもツイートしているので、よかったらフォローお願いします→Twitter@suin