質問: phpで15桁程度でこの桁数間必ず一意になる文字列を生成することは出来ないでしょうか。 ``` uniqid(rand()) ``` を考えていたのですが途中でたまたま同じ値が生成されることがあるのでは無いかと懸念しており何を持って一意が保たれているのかがわかりません。 またdb(mysql)のuuid_shortを利用するのを考えていたのですが桁数が長いことと生成した値を登録するためDBにアクセスせずに別の方法が無いかと考えています。 また仮にuniqidが完全に一意を担保された場合に md5(uniqid(rand()))した時、一度乱数を生成しているのにハッシュ化した時も同じように一意性が保たれるのでしょうか
回答: uniqidが13文字なので、 念を入れてそれに2文字`0-9a-zA-Z`の60文字前後*2(*3600)を加えてランダムで出せばまぁ重複しない文字列が作れるんじゃないですかね? md5を使うと折角の一意な文字列が穴だらけになって重複する可能性が出て来るので辞めた方がいいと思います。 めんどくさければdechexで0〜255で妥協しても十分だと思います。 ``` $id = uniqid(dechex(rand(0, 255))); ```