道招

实现短网址功能

如果您发现本文排版有问题,可以先点击下面的链接切换至老版进行查看!!!

实现短网址功能

短网址或微小的网址是用来表示长URL的URL。 例如,http://tinyurl.com/y9nyxza 将重定向到http://www.iteye.com/topic/577820 使用短网址的主要优点: 1.便于记忆,而不是记50个或多个字符的URL 2.当你想通过短信发送一个50个字符的URL给朋友,你只留下您的信息90个字符。 实现自己的短网址需要如下步骤: 1.定义您自己的网址映射算法。 2.有一个数据库来存储映射的网址。 3.从数据库的短网址的映射找到原始的URL 我不知道别人是如何创建URL映射算法,但在这里,我将告诉你们,我的简单而快速的短网址实现: 该系统使用6个短码字符来表示任何长度的网址。 有效的字符代码是ASCII 'A'到'Z'和'0'的'5',其中每个字符包含2 ^ 5(32)状态。  6短码字符可用于绘制32 ^ 6(1073741824)的网址 首先,你需要一个数据库表来存储和检索你映射的网址。 CREATE TABLE mappedURL (的CREATE TABLE mappedURL( shortCode char(6) not null, lognURL  text not null, PRIMARY KEY  shortCodeInd (shortCode), ); 其次,你需要定义一个算法将长的URL映射到短的URL。 以下是建议的算法: loop1: while true loop1: calculate md5 of the URL loop2: from 1st 4 bytes to 4th 4 bytes of md5 result loop2: cast the 4 bytes to an integer loop3: for shortCodeChar[0] to shortCodeChar[5] use 1st 5 bits of the integer to find the value in codeMap remove 5 bits from the integer end loop3 save shortCodeChar as shortCode if shorCode does not exist in database insert the short code and original URL into database break loop1: else retrieve the stored URL from database if original URL equals to URL stored in database break loop1: end if end if end loop2 insert '-' end loop1 return shortCode Note: codeMap contains value of valid characters from 'a' to 'z' (index 0 to 25) and '0'-'5' (index 26 to 31). 第三,你需要创建一个网页,从数据库的短网址的映射找到原始的URL,并重定向之。   算法原理 算法一 1)将长网址md5生成32位签名串,分为4段, 每段8个字节; 2)对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理; 3)这30位分成6段, 每5位的数字作为字母表的索引取得特定字符, 依次进行获得6位字符串; 4)总的md5串可以获得4个6位串; 取里面的任意一个就可作为这个长url的短url地址; 这种算法,虽然会生成4个,但是仍然存在重复几率,下面的算法一和三,就是这种的实现. 算法二 a-zA-Z0-9 这64位取6位组合,可产生500多亿个组合数量.把数字和字符组合做一定的映射,就可以产生唯一的字符串,如第62个组合就是aaaaa9,第63个组合就是aaaaba,再利用洗牌算法,把原字符串打乱后保存,那么对应位置的组合字符串就会是无序的组合。 把长网址存入数据库,取返回的id,找出对应的字符串,例如返回ID为1,那么对应上面的字符串组合就是bbb,同理 ID为2时,字符串组合为bba,依次类推,直至到达64种组合后才会出现重复的可能,所以如果用上面的62个字符,任意取6个字符组合成字符串的话,你的数据存量达到500多亿后才会出现重复的可能。 具体参看这里彻底完善新浪微博接口和超短URL算法,算法四可以算作是此算法的一种实现,此算法一般不会重复,但是如果是统计的话,就有很大问题,特别是对域名相关的统计,就抓瞎了.
更新时间:
上一篇:下一篇:

相关文章

关注道招网公众帐号