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。