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获取http请求的头信息实现步骤
Dec 16 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
Sep 30 PHP
php使用curl简单抓取远程url的方法
Mar 13 PHP
php实现读取内存顺序号
Mar 29 PHP
PHP7.0版本备注
Jul 23 PHP
Laravel5中防止XSS跨站攻击的方法
Oct 10 PHP
Zend Framework入门应用实例详解
Dec 11 PHP
PHP-X系列教程之内置函数的使用示例
Oct 16 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
Nov 10 PHP
php数据结构之顺序链表与链式线性表示例
Jan 22 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
May 13 PHP
php数组指针函数功能及用法示例
Feb 11 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 将字符串按大写字母分隔成字符串数组
2010/04/30 PHP
php学习之 循环结构实现代码
2011/06/09 PHP
jQuery源码分析之Event事件分析
2010/06/07 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
一个关于jqGrid使用的小例子(行按钮)
2011/11/04 Javascript
FF火狐下获取一个元素同类型的相邻元素实现代码
2012/12/15 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
原生js实现模拟滚动条
2015/06/15 Javascript
jquery判断页面网址是否有效的两种方法
2016/12/11 Javascript
jQuery代码实现实时获取时间
2017/01/29 Javascript
详解本地Node.js服务器作为api服务器的解决办法
2017/02/28 Javascript
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
JQuery Ajax执行跨域请求数据的解决方案
2018/12/10 jQuery
[58:42]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第一局
2016/02/27 DOTA
python多线程threading.Lock锁用法实例
2014/11/01 Python
python实现用户登录系统
2016/05/21 Python
Python 自动化表单提交实例代码
2017/06/08 Python
20个常用Python运维库和模块
2018/02/12 Python
python实现k-means聚类算法
2018/02/23 Python
python psutil库安装教程
2018/03/19 Python
Python 处理图片像素点的实例
2019/01/08 Python
Python3实现从排序数组中删除重复项算法分析
2019/04/03 Python
Python中的 is 和 == 以及字符串驻留机制详解
2019/06/28 Python
tensorboard实现同时显示训练曲线和测试曲线
2020/01/21 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
2020/06/12 Python
Michael Kors美国官网:美式奢侈生活风格的代表
2016/11/25 全球购物
荷兰照明、灯具和配件网上商店:dmlights
2019/08/25 全球购物
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
珍爱生命演讲稿
2014/05/10 职场文书
营销与策划专业求职信
2014/06/20 职场文书
2014小学生国庆65周年演讲稿
2014/09/21 职场文书
2014卖家双十一活动策划书
2014/09/29 职场文书
街道党工委党的群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
岗位竞聘报告范文
2014/11/06 职场文书