10

我正在构建一个新的 Web 应用程序,该应用程序需要生成一个内部短 URL,以便将来使用,以便用户轻松返回具有很长 URL 的特定页面。我最初的想法是将一个数字存储在数据库中并以十六进制值输出,以使其比整数短。TinyURL.com 似乎使用了 HEXADECIMAL 以外的东西(多个大小写字母与数字混合)。有没有一种简单的方法来生成类似于 TinyURL 的东西?

4

5 回答 5

7

请查看这个关于主题的很好的解释:随机 TinyURL 浏览器(更新)

重要部分:

正如我们所建立的,TinyURL 有 62,193,780 个可能的值。TinyURL 由 Base 36 哈希生成(36 表示字符 az 和 0-9 的数量,可以从中构造 TinyURL 的可能值数组),由 MySQL 自动递增,初始值计数为零。

顺便说一句,另一个类似的问题,通过数学观点:创建自己的 Tinyurl 样式 uid。这里有一些 .NET 源代码:Base 36 type for .NET (C#)

于 2009-11-04T00:40:46.630 回答
2

它们使用 base 36 编码,您可以通过使用 base 64 使您的应用程序更加健壮。

这是我在 Python 中尝试的(我确实看到了你的语言标签,请原谅我):

#!/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]

输出:

NTUwMz
ZTVmZD
OGEzNm
Njc2MT
YzVkNj

因此,您可以自动递增一个整数并将其提供给类似这样的某种函数,最终很有可能得到一组随机字符串。另请参阅我对这个问题的回答。一些 base64 实现可能会发出斜线/或加号+,因此您应该在实现中留意这些,因为它们在 URL 中很危险。

哈希非常灵活,可以防止您的用户猜测下一个 URL(如果这对您很重要)。

于 2009-11-04T00:44:09.497 回答
2

另一个供您研究的 asp.net 开源: mini url

于 2009-11-05T12:03:36.327 回答
1

我最近在 codeplex for sharepoint 上看到了类似的东西,他们似乎使用十六进制数字作为 url 缩短器。可能值得看看他们是如何在这里做的http://surlshortener.codeplex.com/

于 2009-11-04T00:44:15.890 回答
-1

我最初的想法是在数据库中存储一个数字并将其输出为 HEXADECIMAL 值以使其短于整数

保持比整数短的东西有什么意义?
所以你想有这样的 URL:http://here.there/ 12D687而不是http://here.there/ 1234567

如果你问我哪一个对我来说更容易,我会告诉后一个。
但老实说,我没有看到我的例子中的重点,因为两者几乎相同。

有没有一种简单的方法来生成类似于 TinyURL 的东西?

是的。要求用户提供。
如果不可能,只需使用普通整数 id。有什么可以更容易...

于 2009-11-04T01:29:02.633 回答