Hatena::ブログ(Diary)

intemous9の日記 このページをアンテナに追加 RSSフィード

2009-04-21

指定した長さ分のランダムな文字列を生成したい

| 01:03 | 指定した長さ分のランダムな文字列を生成したいを含むブックマーク 指定した長さ分のランダムな文字列を生成したいのブックマークコメント

タイトルの通り。

最近プログラムを書いていて、パスワードやIDなどを適当な文字列で初期値としてフィルインしたいという状況が発生した。

文字の長さは任意で指定することができる。

例)

3dDgfgsuw

63asfddffg

--

みたいな感じの文字列を毎回違う風に生成する・・・。

rand()関数やarray_rand()があるのだからと文字列系の関数で探してみたけれど見つからない・・・。

そこでググってみるとよさそうなのを2つ発見


PHPでランダム文字列を生成するString_Randomクラス

http://d.hatena.ne.jp/fbis/20080916/1221540548

以下は上記サイト引用

<?php

require_once 'String/Random.class.php';

$random   = new String_Random;
$rand_str = $random->randregex('[A-Za-z0-9]{32}');

?>

String_Randomクラスを読み込み、そのあとインスタンス化しランダムに使用する文字列とその長さを指定することができるみたい。

自分がこのクラスみて一番よいなぁと思ったのは、ランダムで使用する文字列正規表現のような形で渡すことができるということ!

これなら容易に文字列を変えやすいし、パッと見てわかりやすいというのも良かった。

・・・ただこれの問題点がこのString_RandomクラスはPHPのバージョン4ベースで作られているらしくPHP5以降にはまだ未対応らしい・・・非常におしかった><

ってことでもうひとつ見つけたのがこちら


PHPでランダムな文字列、数字の列を生成する

http://studyroom.g.hatena.ne.jp/pha/20071102/p1

以下サイトより引用

function getRandomString($nLengthRequired = 8){
    $sCharList = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_";
    mt_srand();
    $sRes = "";
    for($i = 0; $i < $nLengthRequired; $i++) {
        $sRes .= $sCharList{mt_rand(0, strlen($sCharList) - 1)};
    }
    return $sRes;
}

こちらの場合、まずランダムに使用する文字列を用意

シードの指定

指定された長さの分をループしながらmt_randとstrlenを使用してランダムな文字を一文字ずつ取得する。

このコードを見て驚いたのが、参考にしたサイトでも書いているとおり、$sCharList{1}とかで文字列を取りだすことができるということ。

こんな取り方できるんだね・・・勉強になりました。

実際に今回作ったランダム文字列取得も2つ目のを参考に関数をつくらせていただきました。

意外とありそうでない関数。(いや・・・探し不足なのかな。。w

自分で考えて作ってみたりできたらおもしろそう!


というわけでまずは上記2つを参考にして、正規表現のような引数の渡し方ができ、かつ容易に使えるようなランダム関数を作ってみよう!

トラックバック - http://d.hatena.ne.jp/intemous9/20090421/1240329809
Connection: close