入力フィールドに長いURLを書き込むことができ、サービスがURLを「http://www.example.org/abcdef
」に短縮するURL短縮サービスを作成したいと考えています。
「abcdef
」の代わりに、を含む6文字の文字列がありa-z, A-Z and 0-9
ます。これにより、560〜570億の文字列が可能になります。
私のアプローチ:
3つの列を持つデータベーステーブルがあります。
- id、整数、自動インクリメント
- long、string、ユーザーが入力した長いURL
- 短い、文字列、短縮されたURL(または6文字のみ)
次に、長いURLをテーブルに挿入します。次に、「id
」の自動インクリメント値を選択して、そのハッシュを作成します。このハッシュは「short
」として挿入する必要があります。しかし、どのようなハッシュを作成する必要がありますか?MD5のようなハッシュアルゴリズムでは、文字列が長すぎます。私はこれらのアルゴリズムを使用しないと思います。自作のアルゴリズムも動作します。
私の考え:
「http://www.google.de/
」の場合、自動インクリメントIDを取得します239472
。次に、次の手順を実行します。
short = '';
if divisible by 2, add "a"+the result to short
if divisible by 3, add "b"+the result to short
... until I have divisors for a-z and A-Z.
これは、数値が割り切れなくなるまで繰り返すことができます。これは良いアプローチだと思いますか?もっと良いアイデアはありますか?
このトピックへの関心が継続しているため、JavaScript、PHP、Python、Javaの実装を使用して、GitHubの効率的なソリューションを公開しました。必要に応じてソリューションを追加してください:)
encode()
との両方のdecode()
機能を持つことができます。手順は、それゆえ、以下のとおりです。データベース内で(1)保存URL(2)データベース(3)からそのURLの一意の行IDを取得ID整数変換短い文字列にしてencode()
、例えば273984
にf5a4
使用(4)短い文字列(例えばf4a4
)あなたに共有可能なURL(5)短い文字列(例:)のリクエストを受け取った場合20a8
、文字列を整数IDにデコードしますdecode()
(6)データベースでURLを検索して指定されたIDを探します。変換のため、使用:github.com/delight-im/ShortURL