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 ignore_user_abort与register_shutdown_function 使用方法
Jun 14 PHP
深入PHP异步执行的详解
Jun 03 PHP
PHP 解决session死锁的方法
Jun 20 PHP
PHP防止post重复提交数据的简单例子
Jun 07 PHP
php使用Session和文件统计在线人数
Jul 04 PHP
ThinkPHP安装和设置
Jul 27 PHP
开启PHP Static 关键字之旅模式
Nov 13 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
PHP基于单例模式编写PDO类的方法
Sep 13 PHP
基于Laravel5.4实现多字段登录功能方法示例
Aug 11 PHP
thinkPHP框架实现的简单计算器示例
Dec 07 PHP
php实现JWT验证的实例教程
Nov 26 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/10/09 PHP
[原创]php逐行读取txt文件写入数组的方法
2015/07/02 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
javascript web对话框与弹出窗口
2009/02/22 Javascript
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
js获取IFRAME当前的URL的方法
2013/11/13 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
ECMAScript6中Set/WeakSet详解
2015/06/12 Javascript
JavaScript实现把数字转换成中文
2015/06/29 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
2015/08/31 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
jQuery将表单序列化成一个Object对象的实例
2016/11/29 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
jquery——九宫格大转盘抽奖实例
2017/01/16 Javascript
浅谈Webpack自动化构建实践指南
2017/12/18 Javascript
Vue2.0 实现歌手列表滚动及右侧快速入口功能
2018/08/08 Javascript
javascript实现电商放大镜效果
2020/11/23 Javascript
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python获取文件版本信息、公司名和产品名的方法
2014/10/05 Python
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
python实现随机梯度下降(SGD)
2020/03/24 Python
Flask框架各种常见装饰器示例
2018/07/17 Python
Flask框架web开发之零基础入门
2018/12/10 Python
详解Python locals()的陷阱
2019/03/26 Python
使用python去除图片白色像素的实例
2019/12/12 Python
Django后端按照日期查询的方法教程
2021/02/28 Python
西海岸男士和男童服装:Johnnie-O
2018/03/15 全球购物
重写子类方法时,抛出异常的书写注意事项
2015/10/17 面试题
幼儿园实习自我鉴定
2013/12/15 职场文书
快递业务员岗位职责
2014/01/06 职场文书
党员公开承诺书
2014/03/25 职场文书
阅兵口号
2014/06/19 职场文书
《确定位置》教学反思
2016/02/18 职场文书
2019年最新证婚词精选集!
2019/06/28 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python