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开发中常用的8个小技巧
Aug 27 PHP
php递归列出所有文件和目录的代码
Sep 10 PHP
php 中英文语言转换类
Sep 07 PHP
通过PHP修改Linux或Unix口令的方法分享
Jan 30 PHP
apache配置虚拟主机的方法详解
Jun 17 PHP
php数组排序usort、uksort与sort函数用法
Nov 17 PHP
PHP翻页跳转功能实现方法
Nov 30 PHP
ThinkPHP3.2.1图片验证码实现方法
Aug 19 PHP
thinkPHP中session()方法用法详解
Dec 08 PHP
php session_decode函数用法讲解
May 26 PHP
浅谈laravel orm 中的一对多关系 hasMany
Oct 21 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
Dec 02 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
简单的页面缓冲技术
2006/10/09 PHP
php Xdebug 调试扩展的安装与使用.
2010/03/13 PHP
php常用图片处理类
2016/03/16 PHP
Laravel利用gulp如何构建前端资源详解
2018/06/03 PHP
用 javascript 实现的点击复制代码
2007/03/24 Javascript
JQuery 常用方法基础教程
2009/02/06 Javascript
javascript中的一些注意事项 更新中
2010/12/06 Javascript
基于jquery的无限级联下拉框js插件
2011/10/29 Javascript
jquery对dom的操作常用方法整理
2013/06/25 Javascript
2则自己编写的jQuery特效分享
2015/02/26 Javascript
php基于redis处理session的方法
2016/03/14 Javascript
好好了解一下Cookie(强烈推荐)
2016/06/14 Javascript
js微信分享实现代码
2020/10/11 Javascript
详解Vue中一种简易路由传参办法
2017/09/15 Javascript
还不懂递归?读完这篇文章保证你会懂
2018/07/29 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
2019/07/24 Javascript
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
[01:10:49]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
浅谈Python 的枚举 Enum
2017/06/12 Python
tensorflow实现简单的卷积神经网络
2018/05/24 Python
Python实现多级目录压缩与解压文件的方法
2018/09/01 Python
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
简单分析python的类变量、实例变量
2019/08/23 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
python 基于wx实现音乐播放
2020/11/24 Python
LINUX下线程,GDI类的解释
2016/12/14 面试题
初中教师业务学习材料
2014/05/12 职场文书
优秀学生党员先进事迹材料
2014/05/29 职场文书
高三英语教学计划
2015/01/23 职场文书
努力工作保证书
2015/02/28 职场文书
python中Matplotlib绘制直线的实例代码
2021/07/04 Python
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android
Linux安装Docker详细教程
2022/07/07 Servers