サイトで「グループ」を作成すると生成される、5文字または6文字の短い招待コードを作成しようとしています。グループ情報はグループテーブルに保存されます。グループへの参加を希望するユーザーは、招待コードを持っている必要があります。他のことを知っている必要はありません。
もちろん、招待コードは一意である必要があり、再確認せずに一意の文字列を生成したいと思っていますが、コードを理解するのは困難でした。私は何十ものSOの質問と回答を読んでいます。これは私が思いついたものです:
名前などのグループ情報をグループテーブルに挿入すると、当然、行には一意の自動インクリメントIDが与えられます。
1)そのIDを取得します
2)1234に追加します
3)チーム名をbase36からbase10に変換した後、値を並べて配置します。「NewYorkYankees」はbase10(3994055806027582482648)[1263399405580602758248264820130221060827])
4)ベース36に変換
5)データベースにコードを挿入します
これはすべてのグループに固有であることが保証されていますよね?衝突の可能性はゼロですか?それはまったくランダムではないので、私はこれを言います。私は何かユニークなものから始め、それをユニークに保ち、ランダムなデータを導入することは決してありません。
ただし、グループ名は繰り返し可能であるため、作成/挿入時に行IDを取得するにはどうすればよいですか?これは機能しませんが、私がいる場所です:
$query = "SELECT id FROM groups WHERE gname = :gname";
...
$uid = $result + '1234';
$hex = md5(":gname NOW()" . uniqid("$uid", true));
base_convert($hex, 10, 36);
intval($str, 36);
$query = "INSERT...";
ユニークで短いですが、ユーザーが利用できないすべての適切な部分がないと予測できません。