PHPでランダムなパスワードを簡単に生成出来るクラスを公開します

By nakayama - 09/02/06 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

携帯に限らずシステム開発では一意のパスワードを生成する処理が必要な時があります。
今回はそのような時に便利なパスワードの生成クラスを公開します。
Zend Framework の拡張ライブラリとして使う事を想定していますが、単独でも十分使用可能です。

使用例

//パスワード生成クラス読み込み
require_once 'My/Password.php';

//デフォルトは8桁のパスワードが生成されます
$password = My_Password::getPassword();
var_dump($password);
      
//『32桁、小文字英字のみ』のパスワード生成
$password = My_Password::getPassword(32, 'small');
var_dump($password);

出力結果は以下のようになります。

string(8) "txRC4hLX"
string(32) "zcyhuypsvbjgrfiacxrfhwusuiuulllb"

説明

int $lenght

パスワードの桁数 (デフォルト 8桁 )

string $mode

文字列の種類を指定 (デフォルト 大小文字英数字 )
small – 小文字英字
large – 大文字英字
smallalnum – 小文字英数字
largealnum – 大文字英数字
num – 数字
alphabet 大小文字英字
alnum – 大小文字英数字

パスワード生成クラスMy_Passwordソース

class My_password
{
    
    /**
     * ファイル名・ユニークID・パスワード生成
     * 
     * @param  integer $length  文字列長 default:8 (1-256)
     * @param  string  $mode    モード   default:'alnum' 
     * @return array
     */
    public static function getPassword($length = 8, $mode = 'alnum')
    {
         if ($length < 1 || $length > 256) {
             return false;
         }
         $smallAlphabet = 'abcdefghijklmnopqrstuvwxyz';
         $largeAlphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
         $numeric       = '0123456789';
         
         switch ($mode) {
         
         // 小文字英字
         case 'small':
             $chars = $smallAlphabet;
             break;
         
         // 大文字英字
         case 'large':
             $chars = $largeAlphabet;
             break;
         
         // 小文字英数字
         case 'smallalnum':
             $chars = $smallAlphabet . $numeric;
             break;
         
         // 大文字英数字
         case 'largealnum':
             $chars = $largeAlphabet . $numeric;
             break;
         
         // 数字
         case 'num':
             $chars = $numeric;
             break;
         
         // 大小文字英字
         case 'alphabet':
             $chars = $smallAlphabet . $largeAlphabet;
             break;
         
         // 大小文字英数字
         case 'alnum':
         default:
             $chars = $smallAlphabet . $largeAlphabet . $numeric;
             break;
         }
         
         $charsLength = strlen($chars);
         
         $password = '';
         for ($i = 0; $i < $length; $i++) {
             $num = mt_rand(0, $charsLength - 1);
             $password .= $chars{$num};
         }
         
         return $password;
    }
    
}

また、PEARにも類似のライブラリがありますのでこちらもご参考下さい。
http://pear.php.net/package/Text_Password