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 相关文章推荐
介绍几个array库的新函数 php
Dec 29 PHP
实现了一个PHP5的getter/setter基类的代码
Feb 25 PHP
让PHP以ROOT权限执行系统命令的方法
Feb 10 PHP
php生成静态文件的多种方法分享
Jul 17 PHP
如何设置mysql允许外网访问
Jun 04 PHP
解决PHP超大文件下载,断点续传下载的方法详解
Jun 06 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
Jun 14 PHP
php输出1000以内质数(素数)示例
Feb 16 PHP
PHP实现生成透明背景的PNG缩略图函数分享
Jul 08 PHP
ThinkPHP连接Oracle数据库
Apr 22 PHP
PHP文件管理之实现网盘及压缩包的功能操作
Sep 20 PHP
php实现的中秋博饼游戏之绘制骰子图案功能示例
Nov 06 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小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
jQuery 插件 将this下的div轮番显示
2009/04/09 Javascript
JavaScript 比较时间大小的代码
2010/04/24 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
7个jQuery最佳实践
2016/01/12 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
2016/06/30 Javascript
js添加千分位的实现代码(超简单)
2016/08/01 Javascript
如何使用jquery实现文字上下滚动效果
2016/10/12 Javascript
angular-ngSanitize模块-$sanitize服务详解
2017/06/13 Javascript
Vue组件实例间的直接访问实现代码
2017/08/20 Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
2019/09/03 Javascript
layui select 禁止点击的实现方法
2019/09/05 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
[05:08]2014DOTA2国际邀请赛 Hao专访复仇的胜利很爽
2014/07/15 DOTA
python正则表达式修复网站文章字体不统一的解决方法
2013/02/21 Python
python重试装饰器示例
2014/02/11 Python
ptyhon实现sitemap生成示例
2014/03/30 Python
Python实现将绝对URL替换成相对URL的方法
2015/06/28 Python
详解用Python处理HTML转义字符的5种方式
2017/12/27 Python
python生成lmdb格式的文件实例
2018/11/08 Python
Python爬虫动态ip代理防止被封的方法
2019/07/07 Python
Python3 批量扫描端口的例子
2019/07/25 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
2020/09/16 Python
突袭HTML5之Javascript API扩展4—拖拽(Drag/Drop)概述
2013/01/31 HTML / CSS
用html5的canvas画布绘制贝塞尔曲线完整代码
2013/08/14 HTML / CSS
canvas生成带二维码海报的踩坑记录
2019/09/11 HTML / CSS
俄罗斯大型在线书店:Читай-город
2019/10/10 全球购物
法国隐形眼镜网站:VisionDirect.fr
2020/03/03 全球购物
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
C语言编程题
2015/03/09 面试题
电气自动化自荐信
2013/10/10 职场文书
财务会计专业求职信
2014/06/09 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
MySQL复制问题的三个参数分析
2021/04/07 MySQL
Python 中面向接口编程
2022/05/20 Python