[PHP-users 10679] Re: 完全にユニークな文字列の作成

Kazumasa Gotoh php-users@php.gr.jp
Wed, 09 Oct 2002 09:10:07 +0900


From: Daisuke Shimada <shimada@sqlink.co.jp>
Date: Tue, 08 Oct 2002 21:30:28 +0900

> ASCIIテーブルから、発生させたいコード範囲を探して、その範囲を、以下の
> $min_numと$max_numに入れれば、一応、1文字のランダム文字が発生します。
> 
> mt_srand((double)microtime()*1000000);
> $rand_char=chr(mt_rand($min_num, $max_num));
> 
> 何文字かつなげたいのであれば、発生させておいて、後で連結させればよいと思い
> ます。

それでは、連結した文字列同士の一意性は保証できません。
また、一文字づつ行うのではなく文字列全体を乱数で生成しても
やはりその一意性は保証できません。
乱数の場合でも、いずれは同じ値が出る可能性はあるからです。

ハッシュ関数でハッシュ値を生成し、もし既存値に同じものがあれば
生成し直す… というような、よくある手法もないではありませんが…
この場合は生成された全ての値をデータとして保持していちいち
検索する必要が出てきます。

結局、元の設問が曖昧で意図が不明確なので、答えにくい部分がありますねぇ。

実用上は、ある条件下で一意性が保証できる値が生成できれば
いいわけであり、「あらゆる場合において完全なもの」を求めても
実用上の意味はあまりありません。

少し前のスレッドにある Message-ID の話しも同様であって、ある
ルールに従って値を生成すれば、実用上はじゅうぶんな一意性を保てる
値が生成できます。
ここでいい加減な方法で値を生成するヤツが出てくると、全体としての
一意性が確保できなくなる場合が出てきますが、やはりそれは
「そいつが悪い」としか言いようがないでしょう。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
(株) セントラル情報センター
                             後藤和政    kgotoh@cic-kk.co.jp