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 相关文章推荐
echo(),print(),print_r()之间的区别?
Nov 19 PHP
利用PHP和AJAX创建RSS聚合器的代码
Mar 13 PHP
php创建多级目录代码
Jun 05 PHP
php绘制一个矩形的方法
Jan 24 PHP
PHP文件操作方法汇总
Jul 01 PHP
详解cookie验证的php应用的一种SSO解决办法
Oct 20 PHP
php代码调试利器firephp安装与使用方法分析
Aug 21 PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 PHP
PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析
Jun 12 PHP
解决tp5在nginx下修改配置访问的问题
Oct 16 PHP
PHP中关于php.ini参数优化详解
Feb 28 PHP
phpstudy隐藏index.php的方法
Sep 21 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一些服务器端特性的配置加强php的安全
2006/10/09 PHP
php中用数组的方法设置cookies
2011/04/21 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
2014/07/22 PHP
PHP 微信支付类 demo
2015/11/30 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
JavaScript面向对象之体会[总结]
2008/11/13 Javascript
JavaScript 类似flash效果的立体图片浏览器
2010/02/08 Javascript
style、 currentStyle、 runtimeStyle区别分析
2010/08/01 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
2015/09/26 Javascript
解决jQuery使用JSONP时产生的错误
2015/12/02 Javascript
使用jQuery加载html页面到指定的div实现方法
2016/07/13 Javascript
基于JavaScript实现点击页面任何位置返回
2016/08/31 Javascript
js实现无限瀑布流实例方法
2019/09/16 Javascript
js实现橱窗展示效果
2020/01/11 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
js实现列表按字母排序
2020/08/11 Javascript
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
Python的Django中django-userena组件的简单使用教程
2015/05/30 Python
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
python3调用windows dos命令的例子
2019/08/14 Python
pytorch 预训练层的使用方法
2019/08/20 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
Python如何定义有默认参数的函数
2020/08/10 Python
python实现感知机模型的示例
2020/09/30 Python
财务负责人任命书
2014/06/06 职场文书
小学生推普周国旗下讲话稿
2014/09/21 职场文书
四风问题自查自纠工作情况报告
2014/10/28 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
2016廉政教育学习心得体会
2016/01/25 职场文书
2019安全宣传标语大全
2019/08/14 职场文书
创业的9条正确思考方式
2019/08/26 职场文书
Golang的继承模拟实例
2021/06/30 Golang