php实现的短网址算法分享
每个网址用6个字符代替,(6^32)最多可以拥有1,073,741,824个短网址。
当然,你还可以记录更详细的信息,如访问记录,创建时间等。
如果真不够用了,还可以删掉很久不用的。
functionshorturl($input){
$base32=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($input);
$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.=$base32[$val];
$int=$int>>5;
}
$output[]=$out;
}
return$output;
}
测试代码:
$input='https://www.nhooo.com/1';
$output=shorturl($input);
echo"Input :$input\n";
echo"Output:{$output[0]}\n";
echo" {$output[1]}\n";
echo" {$output[2]}\n";
echo" {$output[3]}\n";
echo"\n";
$input='https://www.nhooo.com/2';
$output=shorturl($input);
echo"Input :$input\n";
echo"Output:{$output[0]}\n";
echo" {$output[1]}\n";
echo" {$output[2]}\n";
echo" {$output[3]}\n";
echo"\n";
输出:
Input:https://www.nhooo.com/1 Output:h0xg4r bdr3tw osk2d3 4azfqa Input:https://www.nhooo.com/2 Output:tm5kxb ceoj2s yw3dvl nrmrxl