程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 微博短鏈接算法PHP版本

微博短鏈接算法PHP版本

編輯:關於PHP編程

      思路:


    1)將長網址md5生成32位簽名串,分為4段,每段8個字節;


    2)對這四段循環處理,取8個字節,將他看成16進制串與0x3fffffff(30位1)與操作,即超過30位的忽略處理;


    3)這30位分成6段,每5位的數字作為字母表的索引取得特定字符,依次進行獲得6位字符串;


    4)總的md5串可以獲得4個6位串;取裡面的任意一個就可作為這個長url的短url地址;


    下面是PHP代碼:


    function shorturl($url='', $prefix='', $suffix='') {


    $base32 = array (


    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',


    'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',


    'q', 'r', 's', 't', 'u', 'v', 'w', 'x',


    'y', 'z', '0', '1', '2', '3', '4', '5');


    $hex = md5($prefix.$url.$suffix);


    $hexLen = strlen($hex);


    $subHexLen = $hexLen / 8;


    $output = array();


    for ($i = 0; $i < $subHexLen; $i++) {


    $subHex = substr ($hex, $i * 8, 8);


    $int = 0x3FFFFFFF & (1 * ('0x'.$subHex));


    $out = '';


    for ($j = 0; $j < 6; $j++) {


    $val = 0x0000001F & $int;


    $out .= $base32[$val];


    $int = $int >> 5;


    }


    $output[] = $out;


    }


    return $output;


    }


    $urls = shorturl('http://www.php100.com');


    var_dump($urls);

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved