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程序员面试 切忌急功近利(更需要注重以后的发展)
Sep 01 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
Jul 16 PHP
PHP类继承 extends使用介绍
Jan 14 PHP
使用php语句将数据库*.sql文件导入数据库
May 05 PHP
destoon调用企业会员公司形象图片的实现方法
Aug 21 PHP
PHP实现伪静态方法汇总
Jan 13 PHP
php代码调试利器firephp安装与使用方法分析
Aug 21 PHP
PHP简单验证码功能机制实例详解
Mar 27 PHP
Laravel5.1框架注册中间件的三种场景详解
Jul 09 PHP
深入学习微信网址链接解封的防封原理visit_type
Aug 15 PHP
php swoft框架实例用法
Dec 22 PHP
PHP中->和=>的意思
Mar 31 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代码
2006/12/06 PHP
PHP高级对象构建 多个构造函数的使用
2012/02/05 PHP
ecshop 批量上传(加入自定义属性)
2012/03/20 PHP
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
一个原生的用户等级的进度条
2010/07/03 Javascript
Javascript实现的类似Google的Div拖动效果代码
2011/08/09 Javascript
纯JS实现五子棋游戏兼容各浏览器(附源码)
2013/04/24 Javascript
jquery控制左右箭头滚动图片列表的实例
2013/05/20 Javascript
js遍历、动态的添加数据的小例子
2013/06/22 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
自己用jQuery写了一个图片的马赛克消失效果
2014/05/04 Javascript
基于javascript、ajax、memcache和PHP实现的简易在线聊天室
2015/02/03 Javascript
jQueryMobile之Helloworld与页面切换的方法
2015/02/04 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
2018/02/22 Javascript
nuxt.js 缓存实践
2018/06/25 Javascript
bootstrap table实现iview固定列的效果实例代码详解
2019/09/30 Javascript
解决vue自定义指令导致的内存泄漏问题
2020/08/04 Javascript
[00:43]2016完美“圣”典风云人物:单车宣传片
2016/12/02 DOTA
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
Python3中的列表生成式、生成器与迭代器实例详解
2018/06/11 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
Python实现字典按key或者value进行排序操作示例【sorted】
2019/05/03 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
Python random模块的使用示例
2020/10/10 Python
利用HTML5+CSS3实现3D转换效果实例详解
2017/05/02 HTML / CSS
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
个人对照检查材料
2014/02/12 职场文书
学生操行评语大全
2014/04/24 职场文书
护士实习自荐信
2015/03/06 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
写给女朋友的检讨书
2015/05/06 职场文书
法律意见书范文
2015/05/20 职场文书
2015年依法治校工作总结
2015/07/27 职场文书
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
2021/06/18 MySQL