现在的位置: 首页 > 综合 > 正文

短网址原理实现研究一

2013年09月07日 ⁄ 综合 ⁄ 共 904字 ⁄ 字号 评论关闭

今天回家后几乎一直在弄这个问题,原因是走了弯路,短URL是由a-zA-Z0-9这个62个字符中的其中任意6个组合而成,组合后的总数总共有
500多亿个,之前一直想用十六进制位运算,累加进位,但是始终不成功,后来在网上看了下,说是把原URL进行MD5后再进行位运算,得到4种组合随意取
一种,但是结果也会出现重复的情况,尽管概率很小,所以这种方法也被pass掉,最后琢磨了大半晚上,终于做出一种绝不会出现重复结果的算法

 

首先肯定的说,这62个字符随意取其中6个组合,组合数量高达500多亿,如果把数字和字符组合做一个映射关系,那不就只能得到唯一的字符串了吗,
比如第62个组合就是aaaaa9,第63个组合就是aaaaba,再利用洗牌算法,把原字符串打乱后保存,那么对应位置的组合字符串就会是无序的组合。

 

简单举个例子

 

提供的字符只有a,b,c,d 进行洗牌打乱后为 b,a,d,c  取其中任意3个字符为一个字符串组合,其组合数量是64个

 

那么我进行URL转换的时候首先把原URL插入到数据库,再根据数据库插入返回的新ID,找出对应的字符串,例如返回ID为1,那么对应上面的字符串组合就是

 

bbb

同理 ID为2时,字符串组合为

 

bba

依次类推

3——bbd

4——bbc

5——bab

6——baa

7——bad

8——bac

……

 

直至到达64种组合后才会出现重复的可能,所以如果用上面的62个字符,任意取6个字符组合成字符串的话,你的数据存量达到500多亿后才会出现重复的可能。

 

form:http://www.uchome8.com/209

 

上面是别人的想法,很不错的想法,保存下,但是如果需要设置个性的短网址又要怎么实现呢 考虑中。

 

如果设置非个性的短域名的长度为6,要求个性的短域名长度不能为6,可为其它任何数,个性短域名和非个性的域名保存在不同的表,貌似问题就解决了。再考虑考虑。

 

个性短域名主要为了方便大家记住一些不容易记住的连接,比如一般人都记不住微软的网址(我是到现在都没记住),采用个性域名保存该网址后,设置个性为xx。cn/weiruan ,以后访问不是就很方便了。不知道有没有人会这么用。也许只是我个人的一点想法。

抱歉!评论已关闭.