質問: こんばんは。 最近PHPを本格的に勉強し始めました。 標題ですが、PHPで下記の条件を満たした ユニークなIDを生成したいと思っておりますが その方法がわからず困っております。 ウェブで調べるとユニークidの生成には、uniqid()などがありましたが、これだと半角英字が含まれて生成されるため、下記の条件を満たしません。 つきましては、下記の前提および条件を満たすPHPでのユニークidの生成方法を教えて頂けないでしょうか。 お手数ですが、よろしくお願いします。 ※重複については、PHP側でのメソッドがなければ、最悪DBへの登録時にユーザーのidカラムと照合させて対応させます <前提・用途> 1ウェブサービス上でユーザーそれぞれに対して付与する固有の値(ユーザーID)として利用 2そのため、重複はなくす形にする 3プロフィール設定画面などでユーザーにも見えるデータである <条件> 1重複はなく、それぞれがユニーク 2形式としては半角数字のみとし、半角英字は含まない(FacebookのユーザーIDのイメージです) 3ケタ数は、10桁を想定 411111111のようなID内の数字の重複をなるべくなくす
回答: 通し番号などを使わずにこの方法を取るのは、とてもおもしろいですね。良いと思います。 それで問題の部分ですが、たぶんランダムな数が欲しいのならば、uuidではおっしゃるとおり数字以外の文字が含まれてしまうので、ランダムな数字を発生させる関数を使うのはどうでしょうか。 random_int()等なら、数学的にも安全(らしい)です。 あとは、これだと数字の範囲しかしていできないので、少し高度ですがこちらはどうでしょう。 openssl_random_pseudo_bytes(4)みたいに引数にバイト数を入れると、その大きさのランダムなバイナリを返してくれます。このままじゃ数字じゃないので、一旦bin2hexで16進数にして、hexdocで10進数にしてみたりだとか。 hexdec(bin2hex(openssl_random_pseudo_bytes(4))); こんなかんじとか。 でもそこまで理由がないのならば、できるだけUUIDを使うことをおすすめしますよー。