0

現在、私と私の友人はウェブサイトを開発しています。私たちが「プロジェクト」と呼ぶものについては、次のようなプロジェクトに移動するために使用されるデータベースに基本的な自動インクリメント ID があります。

oururl.com/viewproject?id=1

しかし、投稿されたプロジェクトがたくさんある場合、長い URL になると考え始めました。そのため、約 6 文字の長さの英数字の文字列をランダムに生成する必要があります。文字列が重複する可能性を非常に低くしたいので、もちろん、識別子を割り当てる前にデータベースにクエリを実行します。何か助けてくれてありがとう、たくさんのことを意味します!

4

4 に答える 4

2

速度を上げるために、データベースに数値 ID を保持します。これらの数値 ID を英数字 ID に変換するアルゴリズムを使用します。

そうすれば、重複を心配する必要がなく、DB で非常に高速なインデックスを取得できます。

この回答を参照してください: https://stackoverflow.com/a/12479939/362536 そして、この質問: Tinyurl スタイルの一意のコード: 衝突を防ぐ潜在的なアルゴリズム

于 2012-09-22T15:37:40.950 に答える
0

いつでも PHP を使用uniqid()してランダムな文字列を生成し、substr().

$unique_six_character_id = substr(uniqid(), 0, 6);
于 2012-09-22T15:36:15.207 に答える
0

これを試して:

    $id = substr(md5(uniqid()), 0, 6);
于 2012-09-22T15:36:45.900 に答える
0

このコードを使用して、動的な 6 桁の数字を生成できます....

$random = substr(number_format(time() * rand(),0,'',''),0,6);

コードで何が起こっているかを次に示します。外側の部分「substr」は、作成した乱数を 6 文字に切り詰めるために使用されます。スニペットの最後に 10 という数字が表示されますが、これは任意の数字に変更できます。

「number_format」関数は、乱数の生成から生じる科学表記法を取り除くのに役立ちます。途中で「time()」と「rand()」を掛けています。Time() は 1970 年 1 月 1 日からの秒数で、rand() は PHP によって一意に生成された数値です。

一意の番号を生成することは絶対確実ではないことを常に覚えておいてください。アプリケーションで各番号を一意にする必要がある場合は、保存する前にデータベースで衝突チェックを実行してください。

于 2012-09-22T15:45:50.917 に答える