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