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 相关文章推荐
smarty 原来也不过如此~~呵呵
Nov 25 PHP
IStream与TStream之间的相互转换
Aug 01 PHP
建站常用13种PHP开源CMS比较
Aug 23 PHP
PHP 用数组降低程序的时间复杂度
Dec 04 PHP
php 求质素(素数) 的实现代码
Apr 12 PHP
PHP基础知识回顾
Aug 16 PHP
php实现的任意进制互转类分享
Jul 07 PHP
php版微信公众平台接口开发之智能回复开发教程
Sep 22 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
PHP文件类型检查及fileinfo模块安装使用详解
May 09 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 13 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
ie6 动态缩略图不显示的原因
2009/06/21 PHP
PHP生成UTF8文件的方法
2010/05/15 PHP
php4与php5的区别小结(配置异同)
2011/12/20 PHP
PHP实现文件上传和多文件上传
2015/12/24 PHP
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
2016/04/04 PHP
javascript 页面只自动刷新一次
2009/07/10 Javascript
javascript与CSS复习(三)
2010/06/29 Javascript
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
js获取浏览器的可视区域尺寸的实现代码
2011/11/30 Javascript
js jquery数组介绍
2012/07/15 Javascript
jQuery实现DIV层收缩展开的方法
2015/02/27 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
Vue computed计算属性的使用方法
2017/07/14 Javascript
three.js中文文档学习之通过模块导入
2017/11/20 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
Vuex中的Mutations的具体使用方法
2020/06/01 Javascript
Python定时器实例代码
2017/11/01 Python
Python3.6简单的操作Mysql数据库的三个实例
2018/10/17 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
如何使用Python抓取网页tag操作
2020/02/14 Python
python传到前端的数据,双引号被转义的问题
2020/04/03 Python
Html5新特性用canvas标签画多条直线附效果截图
2014/06/30 HTML / CSS
运动会领导邀请函
2014/01/10 职场文书
亲属关系公证书
2014/04/08 职场文书
实习生岗位职责
2014/04/12 职场文书
文体活动总结范文
2014/05/05 职场文书
义和团口号
2014/06/17 职场文书
施工安全责任书范本
2014/07/24 职场文书
班主任与学生安全责任书
2014/07/25 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
教师个人年度总结
2015/02/11 职场文书
CPU不支持Windows11系统怎么办
2021/11/21 数码科技