Je veux créer un service de raccourcissement d'URL où vous pouvez écrire une longue URL dans un champ de saisie et le service raccourcit l'URL en " http://www.example.org/abcdef
".
Au lieu de " abcdef
", il peut y avoir toute autre chaîne contenant six caractères a-z, A-Z and 0-9
. Cela fait 56 ~ 57 milliards de chaînes possibles.
Mon approche:
J'ai une table de base de données avec trois colonnes:
- id, entier, incrémentation automatique
- long, string, l'URL longue saisie par l'utilisateur
- court, chaîne, l'URL raccourcie (ou seulement les six caractères)
Je voudrais ensuite insérer l'URL longue dans le tableau. Ensuite, je sélectionnerais la valeur d'incrémentation automatique pour " id
" et j'en créerais un hachage. Ce hachage doit ensuite être inséré en tant que " short
". Mais quelle sorte de hachage dois-je créer? Les algorithmes de hachage comme MD5 créent des chaînes trop longues. Je n'utilise pas ces algorithmes, je pense. Un algorithme auto-construit fonctionnera également.
Mon idée:
Pour " http://www.google.de/
", j'obtiens l'ID d'incrémentation automatique 239472
. Ensuite, je fais les étapes suivantes:
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.
Cela pourrait être répété jusqu'à ce que le nombre ne soit plus divisible. Pensez-vous que c'est une bonne approche? As-tu une meilleure idée?
En raison de l'intérêt continu pour ce sujet, j'ai publié une solution efficace pour GitHub , avec des implémentations pour JavaScript , PHP , Python et Java . Ajoutez vos solutions si vous le souhaitez :)
encode()
etdecode()
. Les étapes sont donc les suivantes: (1) Enregistrer l'URL dans la base de données (2) Obtenir l'ID de ligne unique pour cette URL à partir de la base de données (3) Convertir l'ID entier en chaîne courte avecencode()
, par exemple273984
enf5a4
(4) Utilisez la chaîne courte (par exemplef4a4
) dans votre URL partageables (5) Lors de la réception d'une demande de chaîne courte (par exemple20a8
), décodez la chaîne en un ID entier avecdecode()
(6) Recherchez l'URL dans la base de données pour l'ID donné. Pour la conversion, utilisez: github.com/delight-im/ShortURL