そこで、ID生成の目的で「AUTO_INCREMENT,乱数」×(10の7乗)のレコードを作成し、「ORDER BY 乱数」でソートしたテーブルを作成しておき、会員ID発行の際に一つずつ抜き出そうと思っています。要するに一意な数字をランダムな順番で抽出したいのです。単純に乱数にすると、会員数が多くなったときにIDが重複しないかどうかの処理が効率悪くなってくると思いまして。②もっと便利な方法がありますか?
①と②の両方についてアドバイスいただける方のみお願いします。
http://www.n-barcode.com/cd/aboutcd.html
チェックデジットについて
URLは参考です。
この方法は、入力ミスをなくすため、数字のコード設定に広く使われて方法です。
有利点は、計算で求められるため全体数が多い場合総当たりしなくても正しいかチェックできる点にあります。
この応用で、チェックデジットを2桁、3桁にする方法も良いと思います。
もうひとつは、下2桁だけ乱数というのは同でしょうか、上5桁は連番で設定することによりユニークになります。
下2桁は単に推測されるのを防ぐためだけに2桁の乱数で設定します。
管理する場合は、上5桁だけを意識して管理すると管理も簡単になると思います。
1)数字のIDは好きですね。覚えやすいし、携帯会員なども入力しやすいので。
何名くらいの会員数を予定されているのか分かりませんが、10万人くらいの会員の場合は、オートインクリメント5桁+ランダム2桁で可能で、ランダム2桁だけで格段に推測が難しくなります。(100分の1の確率で会員IDを当てて、パスワードまでヒットさせるのはかなり難しいと思います。)
数字7桁というのは人間が簡単に覚えられる桁数なので私は好きです。10万人を超えると上記方法では溢れてしまうため8桁になってしまいますが…。
2)セキュリティをどうしても高くしたい場合は完全ランダムアルファベットだと思いますが、覚えられないのでイヤです。
ネット利用者は好きなIDで、非ネット利用者は「日付(秒数まで)+ランダムアルファベット3桁くらい」にすれば、非ネット利用者の登録作業を数人で行う程度であれば、まずかぶる事はありません。(同じ時間(秒数まで同じ)でランダムアルファベット3文字がかぶる事は考えられないです。心配ならアルファベットをもっと増やせば良いかも)
ちなみに非ネット会員がネット会員になった場合にIDを取り直してもらえば済む問題だと思いますし、その時1度だけならどんな長い難しいIDでも入力してくれると思います。
ちなみに、IDの重複チェックですが、MySQLでも10万人程度なら一瞬ですよ。
> 携帯会員なども入力しやすいので。
それは気づきませんでした。やはり全て数字にしようと思います。
参考になりましたので、ありがとうございました。
検討してみます。
ありがとうございます。