我想创建一个URL缩短服务,您可以在其中将长URL写入输入字段,然后该服务将URL缩短为“ http://www.example.org/abcdef
”。
除了“ abcdef
”以外,还有其他任何包含六个字符的字符串a-z, A-Z and 0-9
。这使得56〜570亿个可能的字符串。
我的方法:
我有一个包含三列的数据库表:
- id,整数,自动递增
- long,字符串,用户输入的长URL
- 简短的字符串,缩短的URL(或仅六个字符)
然后,我将长网址插入表中。然后,我将为“ id
” 选择自动增量值,并为其构建一个哈希值。然后,此哈希应插入为“ short
”。但是我应该建立什么样的哈希?像MD5这样的哈希算法创建的字符串太长。我认为我不使用这些算法。自建算法也将起作用。
我的点子:
对于“ http://www.google.de/
”,我获得了自动增量id 239472
。然后,我执行以下步骤:
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.
可以重复进行直到该数字不再可除。您认为这是个好方法吗?你有更好的主意吗?
由于对该主题的持续关注,我为GitHub发布了一种有效的解决方案,其中包含JavaScript,PHP,Python和Java的实现。如果您愿意,请添加您的解决方案:)
encode()
和decode()
功能。因此,步骤如下:(1)在数据库中保存URL(2)从数据库中获取该URL的唯一行ID(3)将整数ID转换为带有的短字符串encode()
,例如273984
,转换为f5a4
(4f4a4
)在您的字符串中使用短字符串(例如)可共享的URL(5)收到短字符串的请求时(例如20a8
),使用decode()
(6)在数据库中查找给定ID的URL 将字符串解码为整数ID。为了转换,使用:github.com/delight-im/ShortURL