PHP数字和字符串ID互转函数(类似优酷ID)


Posted in PHP onJune 30, 2014

不知道你注意了没有,类似优酷、腾讯视频等其他视频链接似乎类似这样的

http://v.youku.com/v_show/id_XNjA5MjE5OTM2.html

注意id_xxx那段,是不是看不懂了,但你无可否认这个就是id,这不国外的一位牛人早在09年就写了针对PHP/Python/Javascript/Java/SQL的生成方法,可见我现在是多么的落伍,下面我把代码贴出来,希望分享精神永存。
<?php 

/**  

 * @author   Kevin van Zonneveld <kevin@vanzonneveld.net>

 * @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  < 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

alphaID(9007199254740989);

执行结果将被返回“fE2XnNGpF”,我们可以把它认为是加密,进行反解密则
<?php

alphaID('fE2XnNGpF', true);

那么就转换成真实的数字“9007199254740989”。方法还可以支持使用key进行加密,使得别人无法解得你真实的ID。
PHP 相关文章推荐
PHP 已经成熟
Dec 04 PHP
一步一步学习PHP(8) php 数组
Mar 05 PHP
PHP array 的加法操作代码
Jul 24 PHP
php模拟socket一次连接,多次发送数据的实现代码
Jul 26 PHP
PHP 登录完成后如何跳转上一访问页面
Jan 14 PHP
PHP的变量类型和作用域详解
Mar 12 PHP
php中静态类与静态变量用法的区别分析
Jan 15 PHP
PHP实现WebService的简单示例和实现步骤
Mar 27 PHP
PHP输出九九乘法表代码实例
Mar 27 PHP
ThinkPHP里用U方法调用js文件实例
Jun 18 PHP
php获取、检查类名、函数名、方法名的函数方法
Jun 25 PHP
PHP常见错误提示含义解释(实用!值得收藏)
Apr 25 PHP
PHP把数字转成人民币大写的函数分享
Jun 30 #PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
Jun 30 #PHP
PHP把JPEG图片转换成Progressive JPEG的方法
Jun 30 #PHP
PHP把小数转成整数3种方法
Jun 30 #PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
Jun 29 #PHP
php防止伪造的数据从URL提交方法
Jun 27 #PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
Jun 27 #PHP
You might like
php垃圾代码优化操作代码
2010/08/05 PHP
php中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
关于PHP的curl开启问题探讨
2014/04/08 PHP
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
php array_key_exists() 与 isset() 的区别
2016/10/24 PHP
作为PHP程序员你要知道的另外一种日志
2018/07/30 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
2020/04/13 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
JavaScript插入动态样式实现代码
2012/02/22 Javascript
Jquery中给animation加更多的运作效果实例
2013/09/05 Javascript
AngularJS 路由详解和简单实例
2016/07/28 Javascript
浅谈jquery采用attr修改form表单enctype不起作用的问题
2016/11/25 Javascript
windows下更新npm和node的方法
2017/11/30 Javascript
10 种最常见的 Javascript 错误(频率最高)
2018/02/08 Javascript
vue实现点击展开点击收起效果
2018/04/27 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
Python中让MySQL查询结果返回字典类型的方法
2014/08/22 Python
Python中return语句用法实例分析
2015/08/04 Python
详解python3实现的web端json通信协议
2016/12/29 Python
Python简单实现Base64编码和解码的方法
2017/04/29 Python
pycharm安装图文教程
2017/05/02 Python
python2与python3共存问题的解决方法
2018/09/18 Python
PyTorch实现更新部分网络,其他不更新
2019/12/31 Python
Python 找出英文单词列表(list)中最长单词链
2020/12/14 Python
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
世界上第一个水枕头:Mediflow
2018/12/06 全球购物
日本动漫周边服饰销售网站:Atsuko
2019/12/16 全球购物
求职简历中的自我评价分享
2013/12/08 职场文书
企业为何需要商业计划书
2013/12/26 职场文书
年会搞笑主持词
2014/03/27 职场文书
科级干部群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
学校实习推荐信
2015/03/27 职场文书
mysql函数之截取字符串的实现
2022/08/14 MySQL