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 相关文章推荐
Banner程序
Oct 09 PHP
PHP生成excel时单元格内换行问题的解决方法
Aug 26 PHP
解析php中var_dump,var_export,print_r三个函数的区别
Jun 21 PHP
php操作xml入门之xml标签的属性分析
Jan 23 PHP
PHP、Python和Javascript的装饰器模式对比
Feb 03 PHP
php将日期格式转换成xx天前的格式
Apr 16 PHP
php中的常用魔术方法汇总
Feb 14 PHP
Yii2创建表单(ActiveForm)方法详解
Jul 23 PHP
使用PHP json_decode可能遇到的坑与解决方法
Aug 03 PHP
php双层循环(九九乘法表)
Oct 23 PHP
PHP whois查询类定义与用法示例
Apr 03 PHP
PHP sdk实现在线打包代码示例
Dec 09 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/11/25 PHP
傻瓜化配置PHP环境――Appserv
2006/12/13 PHP
php自定义函数之递归删除文件及目录
2010/08/08 PHP
php学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
2011/11/07 PHP
PHP递归返回值时出现的问题解决办法
2013/02/19 PHP
基于empty函数的判断详解
2013/06/17 PHP
PHP实现采集抓取淘宝网单个商品信息
2015/01/08 PHP
示例详解Laravel的注册重构
2016/08/14 PHP
关于PHP中字符串与多进制转换函数的实例代码
2016/11/03 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
YII框架常用技巧总结
2019/04/27 PHP
改进:论坛UBB代码自动插入方式
2006/12/22 Javascript
Packer 3.0 JS压缩及混淆工具 下载
2007/05/03 Javascript
编辑浪子版表单验证类
2007/05/12 Javascript
自己的js工具 Event封装
2009/08/21 Javascript
基于jquery的表头固定的若干方法
2011/01/27 Javascript
js调试系列 断点与动态调试[基础篇]
2014/06/18 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
livereload工具实现前端可视化开发【推荐】
2016/12/23 Javascript
js实现文字无缝向上滚动
2017/02/16 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
2019/11/14 Javascript
[00:19]CN DOTA NEVER DIE!VG夺冠rOtK接受采访
2019/12/23 DOTA
Python实例一个类背后发生了什么
2016/02/09 Python
Python的re模块正则表达式操作
2016/05/25 Python
浅谈终端直接执行py文件,不需要python命令
2017/01/23 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
Python操作redis实例小结【String、Hash、List、Set等】
2019/05/16 Python
在python中将list分段并保存为array类型的方法
2019/07/15 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
最新教师自我评价分享
2013/11/12 职场文书
计算机专业毕业生自我鉴定
2014/01/16 职场文书
市场营销管理毕业生自荐信
2014/03/03 职场文书
2016年幼儿园教师师德承诺书
2016/03/25 职场文书