首页 » PHP技术 » php 62进制转换算法(原创)适用于短链接系统

php 62进制转换算法(原创)适用于短链接系统

 

简单转换算法,首先将网址存入mysql里面,一个新网址就是一个新纪录,放进去的时候获取到一个id,然后把相应id转化为62位,就成为了短链接,访问的时候可以将对应的62位进制转化为数字id,去数据库读取相应网址访问即可

[php]

<?php
/**
* @method 转化数字为url
* @author taylor
*/
//拼接0-9 a-z A-Z 此处已经改进,用range('a','z') 取代

$basicNum = range(0, 9);
$basiclittle= range('a','z');
$basicLittle = range('A','Z');
$basic=array_merge($basicNum,$basiclittle,$basicLittle);
/* 生成62个字符*/
////////////*****************转换url***********///////////////////////
$num=62*62*62*62*62-1234;
echo '传入数字为',$num,'<br />';
$flag=1;
$i=0;
while($flag){
$num=intval($num);
$int=floor($num/62);//取得整数部分
$mod[$i]=$num%62;//取得余数部分
if($int==0){//当被除数为0时候结束
$flag=0;
}
//  echo '整数部分为: ',$int,' 余数为:',$mod[$i];//输出算法
// echo '<hr />';
$num=$int;
$i++;
}
$numarray=array_reverse($mod);//反转数组,因为余数是反过来的
foreach($numarray as $k=>$v){
$shortUrl[$k]=$basic[$v];//62位数字对应basic62个数据,转换数字为字母
}
$shortUrl=implode('', $shortUrl);
echo '最终链接为:',$shortUrl;
?>[/php]
[php]

<?php
/**
* @method 转化url为数字
* @author taylor
*/
$j=0;
for($asc=48;$asc<58;$asc++){
$basicNum[$j]=chr($asc);
$j++;
}
$j=0;
for($asc=97;$asc<123;$asc++){
$basiclittle[$j]=chr($asc);
$j++;
}
$j=0;
for($asc=65;$asc<91;$asc++){
$basicLittle[$j]=chr($asc);
$j++;
}
$basic=array_merge($basicNum,$basiclittle,$basicLittle);/* 生成62个字符*/
//print_r($basic);
$shortUrl='ZZZG6';
echo '输入短链为:',$shortUrl;
$shortUrl=str_split($shortUrl);//分割字符串
//print_r($shortUrl);
foreach ($shortUrl as $k=>$v){
$shortArray[$k]=array_search($v, $basic);//将字符串转化为数字 利用$v里面的值找出$basic的键名就是要的数字
}
$shortArray=array_reverse($shortArray);//反转数组,为了要键名
//var_dump($shortArray);
$total=0;
foreach ($shortArray as $k=>$v){
$total+=($v*(pow(62, $k)));//从右至左的位数为N,择取每位的n-1次方相加
}
echo '<br />输出ID号为:',$total;
?>

<strong>[/php]

原文链接:php 62进制转换算法(原创)适用于短链接系统,转载请注明来源!

0