短連結生成的演算法

A愛短鏈發表於2022-04-19

首先短連結有幾個優點,相信大家都瞭解:1、內容需要;2、使用者友好;3、便於管理。

那麼短連結是怎麼實現的呢,其實大概有三個步驟:

1、定義一個URL對映演算法,可以將長的URL對映成短字串;

2、使用一個儲存(資料庫?NoSQL?)來儲存完成的對映;

3、實現自己的URL對映演算法;

這裡面的第三個步驟相對來說比較難,如何將一個比較長的連結生成一個很短的短連結呢,下面有三個辦法:

第一個就是普通實現方法

相信大家以前學習過十進位制和二進位制的互相轉換,或者十進位制和十六進位制的互相轉換,那麼為了更短,我們可以使用62進位制,對於一個數字ID進行轉碼,轉換成一個短字串。

這種做法的缺點是沒有辦法保證所有連結都是固定的位數的長度,而且在高併發的情況下,如何保證能夠快速分發是個問題。

具體實現方法:

文藝實現

演算法描述:使用6個字元來表示短連結,我們使用ASCII字元中的'a'-'z','0'-'5',共計32個字元做為集合。每個字元有32種狀態,六個字元就可以表示32^6(1073741824),那麼如何得到這六個字元,描述如下:

對傳入的長URL進行Md5,得到一個32位的字串,這個字串變化很多,是16的32次方,基本上可以保證唯一性。將這32位分成四份,每一份8個字元,這時機率變成了16的8次方,是4294967296,這個數字碰撞的機率也比較小啦,關鍵是後面的一次處理。我們將這個8位的字元認為是16進位制整數,也就是1*('0x'.$val),然後取0-30位,每5個一組,算出他的整數值,然後對映到我們準備的32個字元中,最後就能夠得到一個6位的短連結地址。

PHP實現如下:

二逼實現

下面這個函式使用了純隨機的方式來生成一個短連結,雖然我們可以通過查詢操作來確保不重複使用短連結,可是... 這樣真的靠譜嗎~~

Technorati 標籤: 短連結,Short Url,對映,雜湊

參考資料:

1、微博短地址原理解析

2、微博短域名原理及作用

3、Yours.org

4、Free PHP URL Shorten script that kicks ass

5、PHP Short Url Algorithm Implementation

6、Implement your own short URL

7、短網址演算法初步彙總

8、Short Url 實現方式

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70016834/viewspace-2887740/,如需轉載,請註明出處,否則將追究法律責任。

相關文章