Heim php教程 php手册 微博短链接算法php版本实现代码

微博短链接算法php版本实现代码

Jun 13, 2016 am 11:58 AM
32位 md5 php 代码 实现 Wille 微博 思路 版本 生成 kurz 签名 算法 网址 链接

思路:
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 $subHex = substr ($hex, $i * 8, 8);
$int = 0x3FFFFFFF & (1 * ('0x'.$subHex));
$out = '';
for ($j = 0; $j $val = 0x0000001F & $int;
$out .= $base[$val];
$int = $int >> 5;
}
$output[] = $out;
}
return $output;
}
$urls = shorturl('http://www.jb51.net/');
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 $subHex = substr ($hex, $i * 8, 8);
$int = 0x3FFFFFFF & (1 * ('0x'.$subHex));
$out = '';
for ($j = 0; $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$url = 'http://www.jb51.net/?id='.$i;
$shorta = shorturl($url);
$short = $shorta[0];
if(in_array($short, $result)){
$repeats[] = $short;
}
$result[] = $short;
}
$result = array();
for($i=0;$i$url = 'http://www.jb51.net/?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.jb51.net/?id=1640"
[1] =>
string(27) "http://www.jb51.net/?id=18661"
}
'fMneYf' =>
array(2) {
[0] =>
string(26) "http://www.jb51.net/?id=2072"
[1] =>
string(26) "http://www.jb51.net/?id=8480"
}
'3eQBzq' =>
array(2) {
[0] =>
string(26) "http://www.jb51.net/?id=4145"
[1] =>
string(26) "http://www.jb51.net/?id=4273"
}
'j2mmuy' =>
array(2) {
[0] =>
string(26) "http://www.jb51.net/?id=7131"
[1] =>
string(27) "http://www.jb51.net/?id=17898"
}
'qEZbIv' =>
array(2) {
[0] =>
string(26) "http://www.jb51.net/?id=7320"
[1] =>
string(26) "http://www.jb51.net/?id=8134"
}
'uQFnay' =>
array(2) {
[0] =>
string(26) "http://www.jb51.net/?id=7347"
[1] =>
string(26) "http://www.jb51.net/?id=7962"
}
'FJj6Fr' =>
array(2) {
[0] =>
string(26) "http://www.jb51.net/?id=8628"
[1] =>
string(26) "http://www.jb51.net/?id=9031"
}
'3Eviym' =>
array(2) {
[0] =>
string(27) "http://www.jb51.net/?id=11175"
[1] =>
string(27) "http://www.jb51.net/?id=14437"
}
}

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 Installations- und Upgrade-Anleitung für Ubuntu und Debian

CakePHP Datum und Uhrzeit CakePHP Datum und Uhrzeit Sep 10, 2024 pm 05:27 PM

CakePHP Datum und Uhrzeit

CakePHP-Datei hochladen CakePHP-Datei hochladen Sep 10, 2024 pm 05:27 PM

CakePHP-Datei hochladen

CakePHP-Routing CakePHP-Routing Sep 10, 2024 pm 05:25 PM

CakePHP-Routing

Besprechen Sie CakePHP Besprechen Sie CakePHP Sep 10, 2024 pm 05:28 PM

Besprechen Sie CakePHP

CakePHP-Projektkonfiguration CakePHP-Projektkonfiguration Sep 10, 2024 pm 05:25 PM

CakePHP-Projektkonfiguration

CakePHP-Kurzanleitung CakePHP-Kurzanleitung Sep 10, 2024 pm 05:27 PM

CakePHP-Kurzanleitung

CakePHP erstellt Validatoren CakePHP erstellt Validatoren Sep 10, 2024 pm 05:26 PM

CakePHP erstellt Validatoren

See all articles