日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

PHP生成短连接

發(fā)布時間:2025/5/22 php 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP生成短连接 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
<?php #短連接生成算法class Short_Url {#字符表public static $charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";public static function short($url) {$key = "alexis";$urlhash = md5($key . $url);$len = strlen($urlhash);#將加密后的串分成4段,每段4字節(jié),對每段進行計算,一共可以生成四組短連接for ($i = 0; $i < 4; $i++) {$urlhash_piece = substr($urlhash, $i * $len / 4, $len / 4);#將分段的位與0x3fffffff做位與,0x3fffffff表示二進制數(shù)的30個1,即30位以后的加密串都歸零$hex = hexdec($urlhash_piece) & 0x3fffffff; #此處需要用到hexdec()將16進制字符串轉(zhuǎn)為10進制數(shù)值型,否則運算會不正常$short_url = "http://t.cn/";//t.cn新浪的#生成6位短連接for ($j = 0; $j < 6; $j++) {#將得到的值與0x0000003d,3d為61,即charset的坐標最大值$short_url .= self::$charset[$hex & 0x0000003d];#循環(huán)完以后將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);?>
Array ( [0] => http://t.cn/KyfLyH [1] => http://t.cn/bPafHS [2] => http://t.cn/H880aD [3] => http://t.cn/TmvDK0 )

生成的短url存到服務(wù)器里,做一個映射,short_url => original_url,輸入短url的時候按照映射轉(zhuǎn)回長url,然后訪問原始url即可

PS:另外有一種想法,就是把url按照順序存貯,第一條為aaaaaa,第二條為aaaaab..以此類推,不需要hash,這樣不就不會重復(fù)了嗎。

?

算法一
  1)將長網(wǎng)址md5生成32位簽名串,分為4段, 每段8個字節(jié);
  2)對這四段循環(huán)處理, 取8個字節(jié), 將他看成16進制串與0x3fffffff(30位1)與操作, 即超過30位的忽略處理;
  3)這30位分成6段, 每5位的數(shù)字作為字母表的索引取得特定字符, 依次進行獲得6位字符串;
  4)總的md5串可以獲得4個6位串; 取里面的任意一個就可作為這個長url的短url地址;
算法二
   a-zA-Z0-9 這64位取6位組合,可產(chǎn)生500多億個組合數(shù)量.把數(shù)字和字符組合做一定的映射,就可以產(chǎn)生唯一的字符串,如第62個組合就是aaaaa9,第63個組 合就是aaaaba,再利用洗牌算法,把原字符串打亂后保存,那么對應(yīng)位置的組合字符串就會是無序的組合。
  把長網(wǎng)址存入數(shù)據(jù)庫,取返回的 id,找出對應(yīng)的字符串,例如返回ID為1,那么對應(yīng)上面的字符串組合就是bbb,同理 ID為2時,字符串組合為bba,依次類推,直至到達64種組合后才會出現(xiàn)重復(fù)的可能,所以如果用上面的62個字符,任意取6個字符組合成字符串的話,你 的數(shù)據(jù)存量達到500多億后才會出現(xiàn)重復(fù)的可能。

算法一:使用新版的md5和sha算法,不存在碰撞問題。算法二:“你的數(shù)據(jù)存量達到500多億后才會出現(xiàn)重復(fù)的可能”。
原理就是排列組合的應(yīng)用。

轉(zhuǎn)載于:https://www.cnblogs.com/seanxyh/archive/2013/04/08/3008543.html

總結(jié)

以上是生活随笔為你收集整理的PHP生成短连接的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。