[PHP-users 34] Re: ユニークなIDを発行する方法

BAC php-users@php.gr.jp
Wed, 13 Jun 2001 10:15:36 +0900


BACです。

On Wed, 13 Jun 2001 09:25:10 +0900
Go Tamura <t-go@geocities.co.jp> wrote:

> 
>  こんにちは。
> 
>  個人の認証をひつようとするサイトを作っているのですが、IDを発行する際
> にどの方法を使うのがいいかなぁと考えています。
> が、それぞれに問題点がありそうです。
> 
> 1.DB(postgresql)のシーケンスを使って連番を与える。
>  これは安全っぽいのですが、メンバーの数が分かってしまうというか、増分を
> 変えてもいいですが、何かそのあたりが気になる。

 連番のスタートを適当な番号にすることによってメンバーの数はわからなくな
ります。さらにチェックディジットを追加することでIDの正当性チェックができ
ますし、増分をばらつかせることにもなります。

> 2.phpで乱数を発生させて、それがユニークかどうかをチェックする。
> ユニークでなければ、発生させ直す。これの繰り返し。
>  どんどん埋まって来たときに、ループがどの程度になるのか。
> 数字の5桁が埋まることはまず無いと考えてますが、安全という意味では!?

 これはどんどん埋まってきたときの処理時間が膨大になります。重複となる可
能性が高くなるとともに、重複しているかどうかチェックする対象も増えるわけ
なので。

> 3.phpのuniqid()をつかう。どうも、この文字列って扱いにくいのですが、
> uniqid()って13桁以下にしたり、数字だけを発生させたりが出来ない?

 ミリ秒単位でユニークであることを保証する、つまり、1日に8億以上のユニー
クIDを消費する限り、桁数はある程度以下には絞れないでしょうね。


 ある程度のユーザ数であれば最初にランダム列を作っておいて、それを順に取
り出していくという方法も使えると思いますが・・・。

----------------------------------------------
BAC