質問: いつもお世話になっております。 モバイルアプリの開発に際して、アプリの会員IDとは別に、 データ引継ぎ用のコードを生成したいと考えております。 (端末を変えた場合等を想定。) データは、サーバ側のDB(MySQL)で管理します。 そこで、特定のキーをもとにして、 5~6桁のユニークなIDを生成する方法をご教示いただければ幸いです。 IDは、英数字混在を想定していますが、英字の大文字/小文字は区別しない想定です。 (MySQLでは、大文字と小文字を区別しない設定にしているため) キーは端末IDでなくてもよいのですが、ユニークなキーを使うものとして、仮に端末IDを考えています。 使用する言語は、PHPになります。 PHPでは、uniqid関数などがあることは調べたのですが、 完全にユニークというわけではないですし、桁数が多いので、 移行用のコードとして利用するには適さないと考えております。 また、コードは、ランダムである必要はないので、 キーをもとにして生成されるようにしたいと考えております。 追記1: ユーザー数は、数万件を想定しています。 また、5,6桁としているのは、ユーザが機種変更等でデータの移行時に直接入力するからになります。 会員IDは、別に持っているのでそれを使うこともできるのですが、不正利用を防止するために別のコードを使いたいです。会員IDは、連番です。 また、数字だけの連番の場合には、推測されやすくなるので、英字も含めたいと考えていました。 会員ID+ランダムな文字列を移行コードにすることも考えています。 以上、よろしくお願いいたします。
回答: > > 5~6桁のユニークなID > > > とありますが、衝突する危険性を考えれば短すぎる可能性が大いにあります。 「誕生日のパラドックス」として知られるように、同じIDが発生する平均件数は、IDの総数の平方根に比例します。つまり、英数字6桁であれば、半分の3桁分、つまり数万件で衝突する危険性が現実的となります。