データベース ID を短い形式にエンコードする方法を見つけようとしていますURL
。たとえば、1 は「Ys47R」になるはずです。次に、値を使用してデータベース検索を実行できるように、「Ys47R」から 1 にデコードしたいと思いINT
ます。データベースを使用して一意である必要がありますID
。1=「Ys47R」、2=「Ys47S」のように、簡単に推測できない配列にしてください。YouTube や bitly のURL's
. md5
、base32
、base64
および `bcpowを使用して何百もの異なるソースを読みましたが、空っぽになりました。
このブログ投稿は有望に見えましたが、パディングとパスキーを追加すると、1 が SDDDG になり、2 が「SDDDH」になり、3 が「SDDDI」になりました。あまりランダムではありません。
base32
ab 0-9 のみ
base64
が使用され、末尾に == などの文字がありました。
次に、これを試しました:
function getRandomString($db, $length = 7) {
$validCharacters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
$validCharNumber = strlen($validCharacters);
$result = "";
for ($i = 0; $i < $length; $i++) {
$index = mt_rand(0, $validCharNumber - 1);
$result .= $validCharacters[$index];
}
これはうまくいきましたが、衝突がなく、データベースに存在しないことを確認するために毎回データベースクエリを実行する必要がありました。
各数値が一意であるデータベースで一意のインクリメントを使用して、エンコードおよびデコードできるID's
文字セットで最小 4 文字のショートを作成する方法はありますか。またはを使用した高度なテクニックについて理解できません。[a-z][A-Z][0-9]
ID
base32
base64
それとも、これを調べすぎていて、もっと簡単な方法がありますか? 上記のランダム文字列関数を実行し、データベースにクエリを実行して常に一意性を確認するのが最善でしょうか?