利用php怎么實(shí)現(xiàn)一個(gè)微博短鏈接算法-創(chuàng)新互聯(lián)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)利用php怎么實(shí)現(xiàn)一個(gè)微博短鏈接算法,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

10年積累的做網(wǎng)站、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先做網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有云縣免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

思路:
1)將長網(wǎng)址md5生成32位簽名串,分為4段, 每段8個(gè)字節(jié);
2)對這四段循環(huán)處理, 取8個(gè)字節(jié), 將他看成16進(jìn)制串與0x3fffffff(30位1)與操作, 即超過30位的忽略處理;
3)這30位分成6段, 每5位的數(shù)字作為字母表的索引取得特定字符, 依次進(jìn)行獲得6位字符串;
4)總的md5串可以獲得4個(gè)6位串; 取里面的任意一個(gè)就可作為這個(gè)長url的短url地址;
下面是PHP代碼:


復(fù)制代碼 代碼如下:


function shorturl($url='', $prefix='', $suffix='') {
$base = 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 .= $base[$val];
$int = $int >> 5;
}
$output[] = $out;
}
return $output;
}
$urls = shorturl('/tupian/20230522/&
var_dump($urls);



結(jié)果


復(fù)制代碼 代碼如下:


array(4) {
[0]=>
string(6) "alms1l"
[1]=>
string(6) "2ipmby"
[2]=>
string(6) "avo1hu"
[3]=>
string(6) "fdlban"
}



另外一個(gè)版本:


復(fù)制代碼 代碼如下:


function shorturl($url='', $prefix='', $suffix='') {
$base = 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",
"6","7","8","9","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");
$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 = 0x0000003D & $int;
$out .= $base[$val];
$int = $int >> 5;
}
$output[] = $out;
}
return $output;
}



結(jié)果:


復(fù)制代碼 代碼如下:


array(4) {
[0] =>
string(6) "6jmMVj"
[1] =>
string(6) "2EnIby"
[2] =>
string(6) "6vIVfu"
[3] =>
string(6) "B7Fb6n"
}



但是升級版本碰撞率反而更高了,不知道為什么。
測試碰撞的測試代碼:


復(fù)制代碼 代碼如下:


$result = array();
$repeats= array();
$loop = 20000;
for($i=0;$i<$loop;$i++){
$url = '/tupian/20230522/id=&
$shorta = shorturl($url);
$short = $shorta[0];
if(in_array($short, $result)){
$repeats[] = $short;
}
$result[] = $short;
}
$result = array();
for($i=0;$i<$loop;$i++){
$url = '/tupian/20230522/id=&
$shorta = shorturl($url);
$short = $shorta[0];
if(in_array($short, $repeats)){
$result[$short][] = $url;
}
}
var_dump($repeats);
var_dump($result);


上述就是小編為大家分享的利用php怎么實(shí)現(xiàn)一個(gè)微博短鏈接算法了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁題目:利用php怎么實(shí)現(xiàn)一個(gè)微博短鏈接算法-創(chuàng)新互聯(lián)
當(dāng)前鏈接:http://bm7419.com/article16/dgdcdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、企業(yè)建站、面包屑導(dǎo)航域名注冊、定制網(wǎng)站、動態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)