Ich möchte einen URL-Shortener-Service erstellen, bei dem Sie eine lange URL in ein Eingabefeld schreiben können und der Service die URL auf " http://www.example.org/abcdef
" verkürzt .
Anstelle von " abcdef
" kann es auch eine andere Zeichenfolge mit sechs Zeichen geben a-z, A-Z and 0-9
. Das macht 56 bis 57 Milliarden mögliche Saiten möglich.
Mein Ansatz:
Ich habe eine Datenbanktabelle mit drei Spalten:
- ID, Ganzzahl, automatische Inkrementierung
- long, string, die lange URL, die der Benutzer eingegeben hat
- kurz, Zeichenfolge, die verkürzte URL (oder nur die sechs Zeichen)
Ich würde dann die lange URL in die Tabelle einfügen. Dann würde ich den Auto-Inkrement-Wert für " id
" auswählen und einen Hash davon erstellen. Dieser Hash sollte dann als " short
" eingefügt werden . Aber welche Art von Hash soll ich bauen? Hash-Algorithmen wie MD5 erzeugen zu lange Zeichenfolgen. Ich denke, ich benutze diese Algorithmen nicht. Ein selbst erstellter Algorithmus funktioniert ebenfalls.
Meine Idee:
Für " http://www.google.de/
" erhalte ich die Auto-Inkrement-ID 239472
. Dann mache ich folgende Schritte:
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.
Das könnte wiederholt werden, bis die Zahl nicht mehr teilbar ist. Halten Sie dies für einen guten Ansatz? Hast du eine bessere Idee?
Aufgrund des anhaltenden Interesses an diesem Thema habe ich eine effiziente Lösung für GitHub mit Implementierungen für JavaScript , PHP , Python und Java veröffentlicht . Fügen Sie Ihre Lösungen hinzu, wenn Sie möchten :)
encode()
unddecode()
Funktionen haben können. Die Schritte sind daher: (1) Speichern der URL in der Datenbank (2) Abrufen der eindeutigen Zeilen-ID für diese URL aus der Datenbank (3) Konvertieren der Ganzzahl-ID in eine kurze Zeichenfolge mitencode()
z. B.273984
inf5a4
(4) Verwenden Sie die kurze Zeichenfolge (z. B.f4a4
) in Ihrer gemeinsam nutzbare URLs (5) Wenn Sie eine Anforderung für eine kurze Zeichenfolge (z. B.20a8
) erhalten, dekodieren Sie die Zeichenfolge in eine ganzzahlige ID mitdecode()
(6) Suchen Sie die URL in der Datenbank nach der angegebenen ID. Verwenden Sie für die Konvertierung: github.com/delight-im/ShortURL