前回単純なランダム文字列を作成しましたが、状況によっては数字・小文字・大文字・記号を
それぞれ最低1つ以上含んだものを生成したい場合があると思います。
所々無理矢理な感じはありますが、とりあえずこんなソースになりました。
<?php function generate_password($length=10){ $char = array(); //使用する文字列 $char[] = range(0,9); $char[] = range('a','z'); $char[] = range('A','Z'); $char[] = array('_', '-'); $list = array(); $merge = array(); $count = 0; foreach($char as $arr){ shuffle($arr); $list[] = $arr[0]; $merge = array_merge($merge, $arr); $count++; } $flip = array_flip($merge); while($count< $length){ $list[] = array_rand( $flip, 1); $count++; } shuffle($list); return implode("", $list); } //文字数を指定して生成 echo generate_password(12);
文字のグループを $char に配列として指定します。
この場合は数字・小文字・大文字・記号をそれぞれ1つ以上使う設定です。
単純に各グループからランダムで1文字ずつ取得し、残りをグループ関係なくランダムに埋めています。
もっとスマートなやり方があると思うのでご存知の方はコメントお願いします。