前回単純なランダム文字列を作成しましたが、状況によっては数字・小文字・大文字・記号を
それぞれ最低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文字ずつ取得し、残りをグループ関係なくランダムに埋めています。
もっとスマートなやり方があると思うのでご存知の方はコメントお願いします。