Recent Comments

最近?流行のブログというものを
 [11/20] John555様
 [11/20] John73様
 [11/20] John555様
日記:ママのパソコンが壊れた。
 [11/20] WheepeGen様
 [11/20] WheepeGen様
RBIO:HDD・CPUの温度監視をして扇風機を自動でON/OFFする。
 [10/07] げんき
 [10/03] とおりすがり様
PHP:fsockopen()を使ってSMTPでメール送信
 [04/10] げんき
 [04/09] freeman様
 [04/09] freeman様
PHP:アンケートでハイスコアを得たエントリ一覧を表示する
 [03/31] げんき
 [03/30] YSAK様

Profile

 Vine Linux 3.2で自宅サーバ構築・運営するにあたっての覚え書き。トラブルシューティング・思いつきのPHPスクリプト。愛車CB5 VIGORのDIY。やらの紹介。

中の人

なかのひと
Graph 2008.11.20
Year:  Month:  Day

<<< フレッツ光プレミアムのCTUのルータ機能の限界? <<<  ||  >>> 検索ロボットがアクセスカウンタを回さないようにする >>>

PHPでランダムな文字列を作る

BIND+PHPによるDiCEで更新可能なダイナミックDNSサーバ構築でも使ってるランダムな文字列を生成する関数をちょっとだけ高機能にしてみた。

高機能ってゆっても、生成される文字列を「英数混在・アルファベット・大文字・小文字・数字」の5パターンを選べるようにしただけやけども。

<?php
/*******************************************************************
Name    :function rand_str($keta,$type)
Action    :$keta桁のランダム文字列を生成する。
     $typeで英数混在・英字のみ・大文字のみ・小文字のみ・数字のみ
     の4種類を指定
      $type ==  all   or 0 or null    :英数混在
      $type ==  ab    or 1        :英字のみ
      $type ==  caps  or 2        :大文字のみ
      $type ==  small or 3        :小文字のみ
      $type ==  num   or 4        :数字のみ
Call    :makepw(int $桁数 str $keta)
Return    :(str)$ランダム文字列
Revision:
    1.00    とりあえず。

                     2007.08.19 Ver1.00 Genki wrote
                     http://www.genkikko.net/
********************************************************************/
function rand_str($keta,$type){
    if(!$keta){
        $keta = 8;
    }
    mt_srand((double)microtime()*1000000);        //乱数初期化
    if($type == "all" || !$type){
        //英数混在
        for($i=0,$str=null;$i<$keta;){        //ループ
            $num=mt_rand(0x00,0x7A);    //ASCIIコードで0-9a-zA-Z:;<=>?@[\]^_`の部分
            if((0x30<$num&&$num<0x39) || (0x41<$num&&$num<0x5A) || (0x61<$num&&$num<0x7A)){    //文字コード英数の範囲内なら
                $str.=chr($num);    //$strの後ろにキャラクタに変更して追加。
                $i++;            //文字数カウンタをインクリメント
            }
        }
        return ($str);                //strを返す
    }elseif($type == "ab" || $type == 1){
        //英字のみ
        for($i=0,$str=null;$i<$keta;){        //ループ
            $num=mt_rand(0x30,0x7A);    //ASCIIコードでa-zA-Z:;<=>?@[\]^_`の部分
            if((0x41<$num&&$num<0x5A) || (0x61<$num&&$num<0x7A)){    //アルファベットの範囲内なら
                $str.=chr($num);    //$strの後ろにキャラクタに変更して追加。
                $i++;
            }
        }
        return ($str);                //strを返す
    }elseif($type == "caps" || $type == 2){
        //大文字のみ
        for($i=0,$str=null;$i<$keta;){    //ループ
            $num=mt_rand(0x41,0x5A);    //ASCIIコードでA-Zの部分
            $str.=chr($num);        //$strの後ろにキャラクタに変更して追加。
            $i++;                //文字数カウンタをインクリメント
        }
        return ($str);                //strを返す
    }elseif($type == "small" || $type == 3){
        //小文字のみ
        for($i=0,$str=null;$i<$keta;$i++){    //ループ
            $num=mt_rand(0x61,0x7A);    //ASCIIコードでa-zの部分
            $str.=chr($num);        //$strの後ろにキャラクタに変更して追加。
        }
        return ($str);                //strを返す
    }elseif($type == "num" || $type == 4){
        //数字のみ
        for($i=0,$str=null;$i<$keta;$i++){    //ループ
            $str.=mt_rand(0,9);        //$strの後ろに数字を追加。
        }
        return ($str);                //strを返す
        
    }else{
        //タイプの指定が悪い
        return("error:bad type.");
    }


}
?>



テストしてみるスクリプトを書く。
<?php

include("rand_str.php");
echo "英数混在<br>",
    rand_str(100),"<br>",
    rand_str(100,0),"<br>",
    rand_str(100,all),"<br><br>",

    "アルファベット<br>",
    rand_str(100,1),"<br>",
    rand_str(100,ab),"<br><br>",

    "大文字<br>",
    rand_str(100,2),"<br>",
    rand_str(100,caps),"<br><br>",

    "小文字<br>",
    rand_str(100,3),"<br>",
    rand_str(100,small),"<br><br>",

    "数字<br>",
    rand_str(100,4),"<br>",
    rand_str(100,num);

?>

動かすとこうなる。

とりあえずのパスワードの発行とか、軽い掲示板のスパム避けなんかに使えるんじゃないかと。

<<< フレッツ光プレミアムのCTUのルータ機能の限界? <<<  ||  >>> 検索ロボットがアクセスカウンタを回さないようにする >>>

アンケート

このページの内容はいかがでしたか?
片手間にポチっと送信してやってください。
役に立った 3
おもしろかった 0
ふつー 0
つまらなかった 0
欲しい情報と違った 0
Score:6

トラックバック

このエントリーのトラックバックURL:
http://www.genkikko.net/mt/mt-tb.cgi/45

トラックバック (1)

» [PHP+MYSQL]メモ 送信元 雑記帳(自己満足)
自分が動いているURLを取得 http://q.hatena.ne.jp/1156677522 ランダムな文字列を作る http://blog.genk... [詳しくはこちら]

コメントを投稿