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分页示例代码
Mar 19 PHP
用PHP写的MySQL数据库用户认证系统代码
Mar 22 PHP
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
Sep 10 PHP
PHP ? EasyUI DataGrid 资料存的方式介绍
Nov 07 PHP
php操作MongoDB类实例
Jun 17 PHP
深入浅析yii2-gii自定义模板的方法
Apr 26 PHP
PHPCMS忘记后台密码的解决办法
Oct 30 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
Jul 10 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
PHP获取二叉树镜像的方法
Jan 17 PHP
laravel框架数据库配置及操作数据库示例
Oct 10 PHP
laravel框架 laravel-admin上传图片到oss的方法
Oct 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
JS实现php的伪分页
2008/05/25 PHP
php统计文章排行示例
2014/03/04 PHP
php对称加密算法示例
2014/05/07 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
JavaScript中也使用$美元符号来代替document.getElementById
2010/06/19 Javascript
基于jquery的9行js轻松实现tab控件示例
2013/10/12 Javascript
JS在可编辑的div中的光标位置插入内容的方法
2014/11/20 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
js仿QQ中对联系人向左滑动、滑出删除按钮的操作
2016/04/07 Javascript
JQuery EasyUI的一些常用组件
2017/07/12 jQuery
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
详解ES6 系列之异步处理实战
2018/10/26 Javascript
layui输入框只允许输入中文且判断长度的例子
2019/09/18 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
[44:09]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第二局
2016/02/25 DOTA
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
解决Python pandas plot输出图形中显示中文乱码问题
2018/12/12 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
wxPython:python首选的GUI库实例分享
2019/10/05 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
总结30个CSS3选择器
2017/04/13 HTML / CSS
canvas实现二维码和图片合成的示例代码
2018/08/01 HTML / CSS
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
ET Mall东森购物网:东森严选
2017/03/06 全球购物
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
台湾家适得:Homeget
2019/02/11 全球购物
财产保全担保书范文
2014/04/01 职场文书
我的梦想演讲稿500字
2014/08/21 职场文书
我的中国心演讲稿
2014/09/04 职场文书
普通党员对照检查材料
2014/09/24 职场文书
2019同学聚会主持词
2019/05/06 职场文书
如何书写授权委托书?
2019/06/25 职场文书