前回単純なランダム文字列を作成しましたが、状況によっては数字・小文字・大文字・記号を
それぞれ最低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文字ずつ取得し、残りをグループ関係なくランダムに埋めています。
もっとスマートなやり方があると思うのでご存知の方はコメントお願いします。
Similar Posts:
- [PHP]10進数を任意の文字を使って62進数などのn進数に相互変換する(基数変換)
- [PHP]最低限覚えておきたい必須関数一覧
- [PHP]ランダムな文字列の生成
- [PHP]重複しないランダムな数字を取り出す
- [PHP]複数の画像をランダムに敷き詰めて一枚の画像に合成
- [PHP]料金表のようなものをテキストだけで表現する
- [PHP]レーダーチャート(クモの巣グラフ)をGDで描画する
- [PHP]クラスとオブジェクト指向の練習(タロットカード占い)