PHP实现把数字ID转字母ID
2015-01-24信息快讯网
以下是对使用PHP把数字ID转字母ID的实现代码进行了详细的分析介绍,需要的朋友可以过来参考下
ID是网站中经常出现的,它一般是数字,但是我们发现现在的网站很多ID都是字母了,比如YouTube的视频播放页它的URL类似/watch?v=yzNjIBEdyww。 下面是一个生成字母ID的方法。使用示例:
alphaID(12354); //会将数字转换为字母。 alphaID('PpQXn7COf',true);//会将字母ID转换为对应的数字。 alphaID(12354,false,6);//指定生成字母ID的长度为6.
源码:
<?php /** * Translates a number to a short alhanumeric version * * Translated any number up to 9007199254740992 * to a shorter version in letters e.g.: * 9007199254740989 --> 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 <[email protected]> * @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<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) { // Digital number <<-- alphabet letter code $in = strrev($in); $out = 0; $len = strlen($in) - 1; for ($t = 0; $t <= $len; $t++) { $bcpow = bcpow($base, $len - $t); $out = $out + strpos($index, substr($in, $t, 1)) * $bcpow; } if (is_numeric($pad_up)) { $pad_up--; if ($pad_up > 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; }
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
PHP图片裁剪函数(保持图像不变形)
PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
PHP按行读取文件时删除换行符的3种方法
Linux中用PHP判断程序运行状态的2个方法
PHP英文字母大小写转换函数小结
php获取中文拼音首字母类和函数分享
php生成随机字符串可指定纯数字、纯字母或者混合的
PHP获取栏目的所有子级和孙级栏目的ID号示例
php GUID生成函数和类
php获取淘宝分类id示例
PHP随机生成随机个数的字母组合示例
PHP修改session_id示例代码
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
php获取汉字首字母的函数
php中的Base62类(适用于数值转字符串)
PHP计算2点经纬度之间的距离代码
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
浅析php中常量,变量的作用域和生存周期
php 删除目录下N分钟前创建的所有文件的实现代码
php中如何判断一个网页请求是ajax请求还是普通请求
浅析PHP原理之变量(Variables inside PHP)
使用PHP获取汉字的拼音(全部与首字母)
PHP随机字符串生成代码(包括大小写字母)
PHP操作MongoDB GridFS 存储文件的详解
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
深入PHP获取随机数字和字母的方法详解
$_GET['goods_id']+0 的使用详解
用PHP提取中英文词语以及数字的首字母的方法介绍