短网址(Short URL) ,顾名思义就是在形式上比较短的网址。在Web 2.0的今天,不得不说,这是一个潮流。目前已经有许多类似服务,借助短网址您可以用简短的网址替代原来冗长的网址,让使用者可以更容易的分享链接。
实现原理
1)将长网址md5生成32位签名串,分为4段, 每段8个字节;
2)对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理;
3)这30位分成6段, 每5位的数字作为字母表的索引取得特定字符, 依次进行获得6位字符串;
4)总的md5串可以获得4个6位串; 取里面的任意一个就可作为这个长url的短url地址;
实现方法
方法一:
function shortUrl($url){
$ 32 = 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($url);
$hexLength = strlen($hex);
$subHexLen = $hexLength / 8;
$output = array();
for ($i = 0; $i < $subHexLen; $i++) {
//每循环一次取到8位 http://www.manongjc.com
$subHex = substr ($hex, $i * 8, 8);
$int = 0x3FFFFFFF & (1 * (\'0x\'.$subHex));
$out = \'\';
for ($j = 0; $j < 6; $j++) {
$val = 0x0000001F & $int;
$out .= $ 32[$val];
$int = $int >> 5;
}
$output[] = $out;
}
return $output;
}
方法二:
function shortUrl2($url){
$result = sprintf(\"%u\",crc32($url));
$show = \'\';
while($result >0){
$s = $result % 62;
if($s > 35){
$s=chr($s+61);
}elseif($s>9 && $s<=35){
$s=chr($s+55);
}
$show .= $s;
$result = floor($result / 62);
}
return $show;
}
echo shortUrl2(\'http://www.manongjc.com\'); 继续阅读与本文标签相同的文章
上一篇 :
幽暗镰刀:隐私安全下的收割者们
-
微信宣布一项新举措,关系到每一个用户,网友一致力挺:干得漂亮!
2026-05-14栏目: 教程
-
微软建议企业客户卸载KB4520062累积更新
2026-05-14栏目: 教程
-
他让我国芯片研究停滞13年,还骗走11亿研发资金,现状如何?
2026-05-14栏目: 教程
-
健乐教学机器人可开展的教学实训内容
2026-05-14栏目: 教程
-
5G套餐曝光遭“吐槽”,iphone11受追捧,导致苹果11销量比较高
2026-05-14栏目: 教程
