php把数字id转字母id
php把数字id转字母id
id是网站中经常出现的,它一般是数字,但是我们发现现在的网站很多id都是字母了,比如youtube的视频播放页它的url类似/watch?v=yznjibedyww。 下面是一个生成字母id的方法。使用示例:
echo alphaid(12354); //qnd echo alphaid('qnd',true); //12354 echo alphaid(12354,false,6); //qndaab echo alphaid('qndaab',true, 6); //12354
源码:
ppqxn7cof * * specifiying the second argument true, it will * translate back e.g.: * ppqxn7cof --> 9007199254740989 * * this function is based on any2dec && dec2any by * fragmer[at]mail[dot]ru * see: http://nl3.php.net/manual/en/function.base-convert.php#52450 * * if you want the alphaid to be at least 3 letter long, use the * $pad_up = 3 argument * * in most cases this is better than totally random id generators * because this can easily avoid duplicate id's. * for example if you correlate the alpha id to an auto incrementing id * in your database, you're done. * * the reverse is done because it makes it slightly more cryptic, * but it also makes it easier to spread lots of ids in different * directories on your filesystem. example: * $part1 = substr($alpha_id,0,1); * $part2 = substr($alpha_id,1,1); * $part3 = substr($alpha_id,2,strlen($alpha_id)); * $destindir = /.$part1./.$part2./.$part3; * // by reversing, directories are more evenly spread out. the * // first 26 directories already occupy 26 main levels * * more info on limitation: * - http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/165372 * * if you really need this for bigger numbers you probably have to look * at things like: http://theserverpages.com/php/manual/en/ref.bc.php * or: http://theserverpages.com/php/manual/en/ref.gmp.php * but i haven't really dugg into this. if you have more info on those * matters feel free to leave a comment. * * @author kevin van zonneveld * @author simon franz * @author deadfish * @copyright 2008 kevin van zonneveld (http://kevin.vanzonneveld.net) * @license http://www.opensource.org/licenses/bsd-license.php new bsd licence * @version svn: release: $id: alphaid.inc.php 344 2009-06-10 17:43:59z kevin $ * @link http://kevin.vanzonneveld.net/ * * @param mixed $in string or long input to translate * @param boolean $to_num reverses translation when true * @param mixed $pad_up number or boolean padds the result up to a specified length * @param string $passkey supplying a password makes it harder to calculate the original id * * @return mixed string or long */function alphaid($in, $to_num = false, $pad_up = false, $passkey = null){ $index = abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz; if ($passkey !== null) { // although this function's purpose is to just make the // id short - and not so much secure, // with this patch by simon franz (http://blog.snaky.org/) // you can optionally supply a password to make it harder // to calculate the corresponding numeric id for ($n = 0; $n 0) { $out -= pow($base, $pad_up); } } $out = sprintf('%f', $out); $out = substr($out, 0, strpos($out, '.')); } else { // digital number -->> alphabet letter code 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;}