suin.io

PHP: パスワード生成関数を1行で書いてみた

suin2010年12月8日

よくあるパスワード生成関数

<?php
function create_password($len = 8)
{
	$chars = array(
		'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
		'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',
	);

	$pw = array();

	for ($i = 0; $i < $len; $i++)
	{
		shuffle($chars);
		$pw[] = $chars[rand(0, 35)];
	}

	shuffle($pw);
	$pw = implode('', $pw);

	return $pw;
}
?>

出典:パスワード生成関数をスマートに書いてみた - Bology

1行で書いたパスワード生成関数

<?php
function make_password($chars = 8)
{
	return substr(str_shuffle('1234567890qwertyuiopasdfghjklzxcvbnm'), 0, $chars);
}

特徴

  • シンプル。
  • 直感的。(文字列の順番をごちゃごちゃにして最初の8文字を取るだけ)
  • rand(), mt_rand(), array_shuffle()などを使わない。
  • 作るのも簡単。なぜなら、アルファベットの並びは、キーボードの並び(笑)

これで、パスワードをつくるのに、配列もクラスもいらないでしょ。

RELATED POSTS