前回単純なランダム文字列を作成しましたが、状況によっては数字・小文字・大文字・記号を
それぞれ最低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]クラスとオブジェクト指向の練習(タロットカード占い)