我正在构建一个新的Web应用程序,该应用程序需要生成一个内部短URL,以便将来用户轻松返回到具有非常长URL的特定页面。我最初的想法是将数字存储在数据库中,并以HEXADECIMAL值输出,以使其短于整数。 TinyURL.com似乎使用了除HEXADECIMAL之外的其他东西(多个大小写字母与数字混合)。是否有一种简单的方法来生成与TinyURL类似的东西?
答案 0 :(得分:7)
请查看关于主题的这个好的解释:Random TinyURL Browser (Updated) 。
重要部分:
通过数学观点来看,BTW,另一个类似的问题:Creating your own Tinyurl style uid。这里有一些.NET源代码:Base 36 type for .NET (C#)正如我们已经确定的那样,TinyURL有62,193,780个可能的值。 TinyURL由Base 36散列生成(36表示字符数az和0-9,可以构造TinyURL的可能值数组),由MySQL自动递增,初始值计数为零。
答案 1 :(得分: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
因此,您可以自动增加一个整数并将其提供给某种类似的函数,并最终获得随机字符串组的机会。另见my answer to this question。一些base64实现有可能发出斜杠/
或加号+
,因此您应该在实现中留意这些,因为它们在URL中是危险的。
哈希非常灵活,可以防止您的用户猜测下一个网址(如果这对您很重要)。
答案 2 :(得分:2)
另一个asp.net开源代码供您调查: mini url
答案 3 :(得分:1)
我最近在codeplex上看到了类似于sharepoint的东西,他们似乎使用十六进制数字作为url shortener。值得看看他们在这里如何做到http://spurlshortener.codeplex.com/
答案 4 :(得分:-1)
我最初的想法是将数字存储在数据库中,并以HEXADECIMAL值输出,以使其短于整数。
保持短于整数的东西是什么意思?
因此,您希望获得以下网址: http://here.there/ 12D687 而不是 http://here.there/ 1234567 ?
如果你问我哪一个对我来说比较容易,我会告诉后者 但老实说,我没有看到我的例子中的重点,因为两者几乎相同。
是否有一种简单的方法来生成与TinyURL类似的东西?
是。 要求用户提供 如果不可能只使用普通整数id。什么可以更容易......