基礎知識---微博中,短鏈接的生成方法

 短網址(Short URL),顧名思義就是在形式上比較短的網址。通常用的是asp或者php轉向,在Web 2.0的今天,不得不說,這是一個潮流。目前已經有許多類似服務,藉助短網址您可以用簡短的網址替代原來冗長的網址,讓使用者可以更容易的分享鏈接。

例如:http://t.cn/SzjPjA  表示http://hi.baidu.com/cubeking/

  短網址服務,可能很多朋友都已經不再陌生,現在大部分微博、手機郵件提醒等地方已經有很多應用模式了,並佔據了一定的市場。估計很多朋友現在也正在使用。 

       看過新浪的短連接服務,發現後面主要有6個字符串組成,於是第一個想到的就是原來公司寫的一個遊戲激活碼規則,也就是下面的算法2,

26個大寫字母 26小寫字母,10個數字,隨機生成6個然後插入數據庫對應一個id,短連接跳轉的時候,根據字符串查詢到對應id,即可實現相應的跳轉!不過2的62次方,不知道有沒有重複的,小概率可以,但是對應不是很大的網站應該足夠了

自從twitter推出短網址(shorturl),繼之國內各大微博跟風,google公開goo.gl使用API,短網址之風愈演愈烈.不得不說這是一個新興又一大熱門web2.0服務.現整理一下,包括完整短網址網站,短網址生成原理,算法舉例,以及優劣比較,同時還介紹幾個phper個人實現的.

算法原理
算法一
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算法,算法四可以算作是此算法的一種實現,此算法一般不會重複,但是如果是統計的話,就有很大問題,特別是對域名相關的統計,就抓瞎了.

簡單生成短網址方法

<?php

02 function base62($x)
03 {
04     $show= '';
05     while($x> 0) {
06         $s= $x% 62;
07         if($s> 35) {
08             $s= chr($s+61);            
09         } elseif($s> 9 && $s<=35) {
10             $s= chr($s+ 55);
11         }
12         $show.= $s;
13         $x= floor($x/62);
14     }
15     return $show;    
16 }
17   
18 function urlShort($url)
19 {
20     $url= crc32($url);
21     $result= sprintf("%u", $url);
22     return base62($result);
23 }
24   
25 echo urlShort("http://hi.baidu.com/cubeking/");
?>





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章