Créer une URL courte similaire à TinyURL.com

je suis en train de construire une nouvelle application web qui a besoin de générer une URL courte interne qui sera utilisée à l'avenir pour les utilisateurs de revenir facilement à une page spécifique qui a une URL très longue. Mes pensées initiales sont de stocker un nombre dans une base de données et de le produire dans une valeur hexadécimale pour le garder plus court qu'un entier. TinyURL.com semble utiliser autre chose que L'hexadécimal (lettres de cas multiples mélangées avec des nombres). Y a-t-il un moyen facile de générer quelque chose de similaire à ce que TinyURL le fait?

10
demandé sur CloudyMarble 2009-11-04 03:37:25

5 réponses

s'il vous Plaît, regardez cette bonne explication sur le sujet: Aléatoire TinyURL Navigateur (Mis À Jour) .

partie importante:

comme nous l'avons établi, il y a 62 193 780 valeurs possibles pour les TinyURL. Les tinyurl's sont générés par un hachage de base 36 (36 indiquant le nombre de caractères A-z et 0-9, le tableau des valeurs possibles à partir desquelles un TinyURL peut être construit), autoincrémenté par MySQL avec un nombre de valeur initiale de zéro.

BTW, un autre SI semblable question, à travers une vue mathématique : la Création de votre propre Tinyurl style uid. Et voici quelques .NET code source: base 36 tapez pour .NET (C#)

7
répondu Rubens Farias 2017-05-23 11:45:36

ils utilisent le codage de base 36, et vous pouvez rendre votre application plus robuste en utilisant la base 64.

voici ce que j'essaierais en Python (je vois vos balises de langage, pardonnez-moi):

#!/usr/bin/python

from base64 import b64encode
from hashlib import sha1

for i in range(5):
    salted_int = "<salt>%s</salt>" % i
    print b64encode(sha1(salted_int).hexdigest())[:6]

extrants:

NTUwMz
ZTVmZD
OGEzNm
Njc2MT
YzVkNj

ainsi vous pouvez Auto-oincrement un entier et le nourrir à une sorte de fonction comme celle-ci, et finir avec une bonne chance d'un groupe aléatoire de cordes. Voir aussi ma réponse à cette question. Certaines implémentations de base64 ont le potentiel de émettre un slash / ou un signe plus +, et donc vous devriez garder un oeil sur ceux-ci dans votre implémentation car ils sont dangereux dans les URLs.

les Hashes sont vraiment flexibles et empêchent vos utilisateurs de deviner L'URL suivante (si c'est important pour vous).

2
répondu Jed Smith 2017-05-23 11:48:39

autre asp.net open-source one pour que vous enquêtiez: mini url

2
répondu tuanvt 2009-11-05 12:03:36

j'ai récemment vu quelque chose comme ça sur codeplex pour sharepoint et ils semblaient utiliser des nombres hexadécimaux pour le raccourci url. Il vaut peut-être la peine de jeter un coup d'oeil à la façon dont ils le font ici http://spurlshortener.codeplex.com/

1
répondu lomaxx 2009-11-04 00:44:15

mes pensées initiales sont de stocker un nombre dans une base de données et de le sortir dans une valeur hexadécimale pour le garder plus court qu'un entier.

Quel est l'intérêt de garder quelque chose de plus court qu'un entier?

Donc vous voulez avoir une URL comme:http://here.y/ 12D687 au lieu de http://here.y/ 1234567?

Si vous vous demandez moi, lequel est le plus facile pour moi, je le dirai au dernier.

Mais honnêtement, je ne vois pas l'intérêt dans mon exemple, car les deux sont à peu près les mêmes.

Existe-t-il un moyen facile de générer quelque chose de similaire à ce que fait TinyURL?

Oui. demandez à l'utilisateur de le fournir.

Si ce n'est pas possible, il suffit d'utiliser le simple entier id. Ce qui peut être plus facile...

-1
répondu Dmytrii Nagirniak 2009-11-04 01:29:02