短链生成算法

2013-11-30 veryyoung 更多博文 » 博客 » GitHub »

原文链接 http://veryyoung.me/blog/2013/11/30/short-link.html
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


最近看到微博的短链接真是很火啊,新浪、腾讯、搜狐等微博网站都加入了短链接的功能。之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少。短链接的主要职责就是把原始链接很长的地址压缩成只有6 个字母的短链接地址,当我们点击这6 个字母的链接后,我们又可以跳转到原始链接地址。

国内外有很多公司都提供了短链,比如微博,推特,还有各种网盘 下面是几个例子:

  1. url.cn/JIIcys
  2. t.cn/zHgLwAv
  3. t.cn/8kNQmsg

最容易想到的算法可能是利用md5类的加密算法,然后针对加密后的字符串进行处理。 1)将长网址md5生成32位签名串,分为4段, 每段8个字节; 2)对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理; 3)这30位分成6段, 每5位的数字作为字母表的索引取得特定字符, 依次进行获得6位字符串; 4)总的md5串可以获得4个6位串; 取里面的任意一个就可作为这个长url的短url地址。

当生成短网址链接之后,只需要在表中(数据库或者类NoSql的K-V存储)存储原始链接与短链接的映射关系即可。