PHP生成短网址的3种方法代码实例
短网址服务,可能很多朋友都已经不再陌生,现在大部分微博、手机邮件提醒等地方已经有很多应用模式了,并占据了一定的市场。估计很多朋友现在也正在使用。看过新浪的短连接服务,发现后面主要有6个字符串组成。
太多算法的东西,也没必要去探讨太多,最主要的还是实现,下面是三种方法的代码:
<?php
//纯随机生成方法
functionrandom($length,$pool='')
{
$random='';
if(empty($pool)){
$pool='abcdefghkmnpqrstuvwxyz';
$pool.='23456789';
}
srand((double)microtime()*1000000);
for($i=0;$i<$length;$i++)
{
$random.=substr($pool,(rand()%(strlen($pool))),1);
}
return$random;
}
$a=random(6);
print_r($a);
//枚举生成方法
functionshorturl($input){
$base32=array(
"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",
"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($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;
}
$a=shorturl("https://www.nhooo.com");
print_r($a);
//62位生成方法
functionbase62($x)
{
$show='';
while($x>0){
$s=$x%62;
if($s>35){
$s=chr($s+61);
}elseif($s>9&&$s<=35){
$s=chr($s+55);
}
$show.=$s;
$x=floor($x/62);
}
return$show;
}
functionurlShort($url)
{
$url=crc32($url);
$result=sprintf("%u",$url);
returnbase62($result);
}
echourlShort("https://www.nhooo.com/");
?>