PHP数字和字符串ID互转函数(类似优酷ID)
不知道你注意了没有,类似优酷、腾讯视频等其他视频链接似乎类似这样的
http://v.youku.com/v_show/id_XNjA5MjE5OTM2.html
注意id_xxx那段,是不是看不懂了,但你无可否认这个就是id,这不国外的一位牛人早在09年就写了针对PHP/Python/Javascript/Java/SQL的生成方法,可见我现在是多么的落伍,下面我把代码贴出来,希望分享精神永存。
<?php
/**
*@author KevinvanZonneveld<kevin@vanzonneveld.net>
*@author SimonFranz
*@author Deadfish
*@copyright2008KevinvanZonneveld(http://kevin.vanzonneveld.net)
*@license http://www.opensource.org/licenses/bsd-license.phpNewBSDLicence
*@version SVN:Release:$Id:alphaID.inc.php3442009-06-1017:43:59Zkevin$
*@link http://kevin.vanzonneveld.net/
*
*@parammixed $in Stringorlonginputtotranslate
*@paramboolean$to_num Reversestranslationwhentrue
*@parammixed $pad_up Numberorbooleanpaddstheresultuptoaspecifiedlength
*@paramstring $passKeySupplyingapasswordmakesithardertocalculatetheoriginalID
*
*@returnmixedstringorlong
*/
functionalphaID($in,$to_num=false,$pad_up=false,$passKey=null)
{
$index="abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if($passKey!==null){
//Althoughthisfunction'spurposeistojustmakethe
//IDshort-andnotsomuchsecure,
//withthispatchbySimonFranz(http://blog.snaky.org/)
//youcanoptionallysupplyapasswordtomakeitharder
//tocalculatethecorrespondingnumericID
for($n=0;$n<strlen($index);$n++){
$i[]=substr($index,$n,1);
}
$passhash=hash('sha256',$passKey);
$passhash=(strlen($passhash)<strlen($index))
?hash('sha512',$passKey)
:$passhash;
for($n=0;$n<strlen($index);$n++){
$p[]= substr($passhash,$n,1);
}
array_multisort($p, SORT_DESC,$i);
$index=implode($i);
}
$base =strlen($index);
if($to_num){
//Digitalnumber <0){
$out-=pow($base,$pad_up);
}
}
$out=sprintf('%F',$out);
$out=substr($out,0,strpos($out,'.'));
}else{
//Digitalnumber -->> alphabetlettercode
if(is_numeric($pad_up)){
$pad_up--;
if($pad_up>0){
$in+=pow($base,$pad_up);
}
}
$out="";
for($t=floor(log($in,$base));$t>=0;$t--){
$bcp=bcpow($base,$t);
$a =floor($in/$bcp)%$base;
$out=$out.substr($index,$a,1);
$in =$in-($a*$bcp);
}
$out=strrev($out);//reverse
}
return$out;
}
使用举例
<?php alphaID(9007199254740989);
执行结果将被返回“fE2XnNGpF”,我们可以把它认为是加密,进行反解密则
<?php
alphaID('fE2XnNGpF',true);那么就转换成真实的数字“9007199254740989”。方法还可以支持使用key进行加密,使得别人无法解得你真实的ID。