[PHP]文字の種類ごとに最低1つ以上使ったランダム文字列


前回単純なランダム文字列を作成しましたが、状況によっては数字・小文字・大文字・記号を
それぞれ最低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:

m4s0n501
This entry was posted in PHP and tagged , , . Bookmark the permalink.

One Response to [PHP]文字の種類ごとに最低1つ以上使ったランダム文字列

  1. Pingback: [PHP]ランダムな文字列の生成 | PHP Archive

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>