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 相关文章推荐
教你IIS6的PHP最佳配置方法
Sep 05 PHP
php flush类输出缓冲剖析
Oct 19 PHP
Discuz 模板语句分析及知识技巧
Aug 21 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
Aug 01 PHP
php获取数组长度的方法(有实例)
Oct 27 PHP
ThinkPHP行为扩展Behavior应用实例详解
Jul 22 PHP
php过滤表单提交的html等危险代码
Nov 03 PHP
浅谈php命令行用法
Feb 04 PHP
php备份数据库类分享
Apr 14 PHP
PHP的Yii框架中创建视图和渲染视图的方法详解
Mar 29 PHP
教你在header中隐藏php的版本信息
Aug 10 PHP
PHP错误和异常处理功能模块示例
Nov 12 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环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
2006/11/17 PHP
PHP+MYSQL 出现乱码的解决方法
2008/08/08 PHP
php实现的错误处理封装类实例
2017/06/20 PHP
Laravel学习基础之migrate的使用教程
2017/10/11 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
JavaScript数据结构和算法之二叉树详解
2015/02/11 Javascript
深入理解JavaScript系列(34):设计模式之命令模式详解
2015/03/03 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
vue插件tab选项卡使用小结
2016/10/27 Javascript
微信小程序 删除项目工程实现步骤
2016/11/10 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
Jquery Easyui选项卡组件Tab使用详解(10)
2016/12/18 Javascript
angular学习之ngRoute路由机制
2017/04/12 Javascript
this在vue和小程序中的使用详解
2019/01/28 Javascript
JS原型与继承操作示例
2019/05/09 Javascript
微信小程序实现原生步骤条
2019/07/25 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
关于Python面向对象编程的知识点总结
2017/02/14 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
2019/08/22 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
屈臣氏泰国官网:Watsons TH
2021/02/23 全球购物
开发中都用到了那些设计模式?用在什么场合?
2014/08/21 面试题
书法比赛获奖感言
2014/02/10 职场文书
求职自荐信怎么写
2014/03/06 职场文书
少先队学雷锋活动月总结
2014/03/09 职场文书
精神文明建设先进个人事迹材料
2014/12/24 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
浅谈如何提高PHP代码质量之端到端集成测试
2021/05/28 PHP
python 字典和列表嵌套用法详解
2021/06/29 Python
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS