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的5个入手程序
Nov 23 PHP
使用PHP导出Redis数据到另一个Redis中的代码
Mar 12 PHP
php ci 获取表单中多个同名input元素值的代码
Mar 25 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
Jul 06 PHP
mysql查找删除重复数据并只保留一条实例详解
Sep 24 PHP
详解PHP归并排序的实现
Oct 18 PHP
PHP连接MySQL进行增、删、改、查操作
Feb 19 PHP
基于 Swoole 的微信扫码登录功能实现代码
Jan 15 PHP
PHP实现APP微信支付的实例讲解
Feb 10 PHP
php数值计算num类简单操作示例
May 15 PHP
PHP使用QR Code生成二维码实例
Jul 07 PHP
php双向队列实例讲解
Nov 17 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
function.inc.php超越php
2006/12/09 PHP
PHP开发中常用的三个表单验证函数使用小结
2010/03/03 PHP
php中FTP函数ftp_connect、ftp_login与ftp_chmod用法
2014/11/18 PHP
php给每个段落添加空格的方法
2015/03/20 PHP
2017年最好用的9个php开发工具推荐(超好用)
2017/10/23 PHP
PHP生成(支持多模板)二维码海报代码
2018/04/30 PHP
Array的push与unshift方法性能比较分析
2011/03/05 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
JavaScript语言精粹经典实例(整理篇)
2016/06/07 Javascript
jQuery内存泄露解决办法
2016/12/13 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
jQuery实现文档树效果
2017/02/20 Javascript
JavaScript拖动层Div代码
2017/03/01 Javascript
Angularjs按需查询实例代码
2017/10/30 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
JavaScript如何把两个数组对象合并过程解析
2019/10/10 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
2020/02/12 Javascript
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
[53:50]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python中List的sort方法指南
2014/09/01 Python
Python 运行 shell 获取输出结果的实例
2019/01/07 Python
Python如何爬取实时变化的WebSocket数据的方法
2019/03/09 Python
python3.4中清屏的处理方法
2020/07/06 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
IE下实现类似CSS3 text-shadow文字阴影的几种方法
2011/05/11 HTML / CSS
HTML5实现文件断点续传的方法
2017/01/04 HTML / CSS
全球知名巧克力品牌:Godiva
2016/07/22 全球购物
法人委托书范本
2014/09/15 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
领导班子整改方案
2014/10/25 职场文书
2015年生活老师工作总结
2015/05/27 职场文书
医院保洁员管理制度
2015/08/05 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS