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 相关文章推荐
为php4加入动态flash文件的生成的支持
Oct 09 PHP
Mysql中limit的用法方法详解与注意事项
Apr 19 PHP
让的PHP代码飞起来的40条小技巧(提升php效率)
Apr 12 PHP
浅析PHP Socket技术
Aug 02 PHP
ThinkPHP进程计数类Process用法实例详解
Sep 25 PHP
PHP设计模式之观察者模式实例
Feb 22 PHP
详解PHP实现异步调用的4种方法
Mar 14 PHP
PHP数据库操作三:redis用法分析
Aug 16 PHP
php学习笔记之mb_strstr的基本使用
Feb 03 PHP
PHP实现断点续传乱序合并文件的方法
Sep 06 PHP
php ZipArchive实现多文件打包下载实例
Oct 31 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
Dec 01 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使用ob_start生成html页面的方法
2014/11/07 PHP
php opendir()列出目录下所有文件的实例代码
2016/10/02 PHP
PHP文件操作详解
2016/12/30 PHP
PHP设计模式之观察者模式定义与用法分析
2019/04/04 PHP
JavaScript的面向对象(二)
2006/11/09 Javascript
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
2008/09/26 Javascript
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
javascript (用setTimeout而非setInterval)
2011/12/28 Javascript
js定时器(执行一次、重复执行)
2014/03/07 Javascript
jquery获取对象的方法足以应付常见的各种类型的对象
2014/05/14 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
2014/09/03 Javascript
jQuery实现带水平滑杆的焦点图动画插件
2016/03/08 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
2016/06/15 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
JavaScript实现一个空中避难的小游戏
2017/06/06 Javascript
mui框架 页面无法滚动的解决方法(推荐)
2018/01/25 Javascript
浅探express路由和中间件的实现
2019/09/30 Javascript
JavaScript判断数组类型的方法
2019/10/23 Javascript
绘制微信小程序验证码功能的实例代码
2021/01/05 Javascript
[44:40]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
python 利用jinja2模板生成html代码实例
2019/10/10 Python
python kafka 多线程消费者&amp;手动提交实例
2019/12/21 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
阿联酋网上花店:Ferns N Petals
2018/02/14 全球购物
德国前卫设计师时装在线商店:Luxury Loft
2019/11/04 全球购物
既然说Ruby中一切都是对象,那么Ruby中类也是对象吗
2013/01/26 面试题
2014年大学班级工作总结
2014/11/14 职场文书
家长会欢迎词
2015/01/23 职场文书
会议欢迎词范文
2015/01/27 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
李强为自己工作观后感
2015/06/11 职场文书
2016新年感言
2015/08/03 职场文书
使用canvas对video视频某一刻截图功能
2021/09/25 HTML / CSS