私は、あなた自身の質問と答えであなた自身のクイズを作ることができる小さなトリビアに取り組んでいます. 各ゲームの URL (game.xx/QfsNS) を作成したいのid
ですが、ゲームの自動インクリメントだけではなく、id
短縮 URL のように文字の組み合わせを使用したいと考えています。 URL。
SHA-1 を試してみましたが、長すぎました。それほど複雑である必要はありません。
私は何をすべきか?
私は、あなた自身の質問と答えであなた自身のクイズを作ることができる小さなトリビアに取り組んでいます. 各ゲームの URL (game.xx/QfsNS) を作成したいのid
ですが、ゲームの自動インクリメントだけではなく、id
短縮 URL のように文字の組み合わせを使用したいと考えています。 URL。
SHA-1 を試してみましたが、長すぎました。それほど複雑である必要はありません。
私は何をすべきか?
Yourls のようなスクリプトを使用するのがおそらく最善です - http://yourls.org/
これにより、探している「短い URL スタイル」のリンクが生成されます。衝突や、アルゴリズムが十分にランダムかどうかについて心配する必要はありません。
ゲームの「長い」URL を渡します。たとえば、game.xx/game/football/etc/somthing/98765432 とすると、game.xx/123abc に短縮されます。
より短く、より良いランダム化:
function random_string($length = 6) {
$str = '';
$characters = array_merge(range('A','Z'), range('a','z'), range('0','9'));
$max = count($characters) - 1;
for ($i = 0; $i < $length; $i+=1) {
$rand = mt_rand(0, $max);
$str .= $characters[$rand];
}
return $str;
}
または、MD5 ハッシュ (またはその他のアルゴリズム) を生成して短縮することもできます。
echo substr(md5(time()), 0, 6);
最も重要な部分は、「ID」が既に存在する (衝突) かどうかを確認することです。生成プロセスはそれほど難しくありません。
生成された「ID」が存在する限り、すべてのデータベース エントリをループする必要があり、一意の「ID」が見つかったらすぐにエントリを挿入します。
クイズの ID に基づいて、独自のハッシュ アルゴリズムを作成できます。適切に記述されていれば、一意性が保証されます。
クイズをデータベースに保存している場合、これは役立つかもしれませんが、うまくいきません:
function random_string($length=6){
$str = "";
$characters = array('B','C','D','F','G','H','J','K','L','M','N','P','Q','R','S','T','V','W','X','Y','Z','b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9');
$max = count($characters) - 1;
for ($i = 0; $i < $length; $i++){
$rand = rand(0, $max);
$str .= $characters[$rand];
}
return $str;
}