国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

微博短鏈接算法php版本實現代碼

2024-05-04 23:14:06
字體:
來源:轉載
供稿:網友
思路:
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='') {
$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('http://www.survivalescaperooms.com/');
var_dump($urls);


結果

復制代碼 代碼如下:


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


另外一個版本:

復制代碼 代碼如下:


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;
}


結果:

復制代碼 代碼如下:


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


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

復制代碼 代碼如下:


$result = array();
$repeats= array();
$loop = 20000;
for($i=0;$i<$loop;$i++){
$url = 'http://www.survivalescaperooms.com/?id='.$i;
$shorta = shorturl($url);
$short = $shorta[0];
if(in_array($short, $result)){
$repeats[] = $short;
}
$result[] = $short;
}
$result = array();
for($i=0;$i<$loop;$i++){
$url = 'http://www.survivalescaperooms.com/?id='.$i;
$shorta = shorturl($url);
$short = $shorta[0];
if(in_array($short, $repeats)){
$result[$short][] = $url;
}
}
var_dump($repeats);
var_dump($result);


結果:

復制代碼 代碼如下:


array(8) {
[0] =>
string(6) "3eQBzq"
[1] =>
string(6) "uQFnay"
[2] =>
string(6) "qEZbIv"
[3] =>
string(6) "fMneYf"
[4] =>
string(6) "FJj6Fr"
[5] =>
string(6) "3Eviym"
[6] =>
string(6) "j2mmuy"
[7] =>
string(6) "jyQfIv"
}
array(8) {
'jyQfIv' =>
array(2) {
[0] =>
string(26) "http://www.survivalescaperooms.com/?id=1640"
[1] =>
string(27) "http://www.survivalescaperooms.com/?id=18661"
}
'fMneYf' =>
array(2) {
[0] =>
string(26) "http://www.survivalescaperooms.com/?id=2072"
[1] =>
string(26) "http://www.survivalescaperooms.com/?id=8480"
}
'3eQBzq' =>
array(2) {
[0] =>
string(26) "http://www.survivalescaperooms.com/?id=4145"
[1] =>
string(26) "http://www.survivalescaperooms.com/?id=4273"
}
'j2mmuy' =>
array(2) {
[0] =>
string(26) "http://www.survivalescaperooms.com/?id=7131"
[1] =>
string(27) "http://www.survivalescaperooms.com/?id=17898"
}
'qEZbIv' =>
array(2) {
[0] =>
string(26) "http://www.survivalescaperooms.com/?id=7320"
[1] =>
string(26) "http://www.survivalescaperooms.com/?id=8134"
}
'uQFnay' =>
array(2) {
[0] =>
string(26) "http://www.survivalescaperooms.com/?id=7347"
[1] =>
string(26) "http://www.survivalescaperooms.com/?id=7962"
}
'FJj6Fr' =>
array(2) {
[0] =>
string(26) "http://www.survivalescaperooms.com/?id=8628"
[1] =>
string(26) "http://www.survivalescaperooms.com/?id=9031"
}
'3Eviym' =>
array(2) {
[0] =>
string(27) "http://www.survivalescaperooms.com/?id=11175"
[1] =>
string(27) "http://www.survivalescaperooms.com/?id=14437"
}
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 秦皇岛市| 新晃| 射洪县| 江华| 宁津县| 聂荣县| 鸡东县| 德化县| 连州市| 兰考县| 望奎县| 屏边| 沭阳县| 建始县| 且末县| 锦州市| 邳州市| 高要市| 丽江市| 邯郸县| 大厂| 潮州市| 宣恩县| 濮阳市| 茶陵县| 灵石县| 勃利县| 红桥区| 清新县| 黔西| 宝丰县| 兴义市| 霍州市| 永丰县| 三江| 城市| 文化| 固安县| 大城县| 安陆市| 杭州市|