短鏈接生成算法


<?php 
     #短鏈接生成算法
     
     class Short_Url {
         #字符表
         public static $charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
 
         public static function short($url) {
             $key = "alexis";
             $urlhash = md5($key . $url);
             $len = strlen($urlhash);
 
             #將加密后的串分成4段,每段4字節,對每段進行計算,一共可以生成四組短連接
             for ($i = 0; $i < 4; $i++) {
                 $urlhash_piece = substr($urlhash, $i * $len / 4, $len / 4);
                 #將分段的位與0x3fffffff做位與,0x3fffffff表示二進制數的30個1,即30位以后的加密串都歸零
                 $hex = hexdec($urlhash_piece) & 0x3fffffff; #此處需要用到hexdec()將16進制字符串轉為10進制數值型,否則運算會不正常
 
                 $short_url = "http://t.cn/";
                 #生成6位短連接
                 for ($j = 0; $j < 6; $j++) {
                     #將得到的值與0x0000003d,3d為61,即charset的坐標最大值
                     $short_url .= self::$charset[$hex & 0x0000003d];
                     #循環完以后將hex右移5位
                     $hex = $hex >> 5;
                 }
 
                 $short_url_list[] = $short_url;
             }
 
             return $short_url_list;
         }
     }
 
     $url = "http://www.cnblogs.com/zemliu/";
     $short = Short_Url::short($url);
     print_r($short);
 ?>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM