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读取flash文件高宽帧数背景颜色的方法
Jan 06 PHP
PHP实现获取客户端IP并获取IP信息
Mar 17 PHP
PHP安装memcached扩展笔记
May 28 PHP
微信支付开发动态链接Native支付
Jul 12 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
Nov 18 PHP
php微信公众号开发模式详解
Nov 28 PHP
php计算给定日期所在周的开始日期和结束日期示例
Feb 06 PHP
PHP实现将标点符号正则替换为空格的方法
Aug 09 PHP
PHP 结合 Boostrap 结合 js 实现学生列表删除编辑及搜索功能
May 21 PHP
PHP的JSON封装、转变及输出操作示例
Sep 27 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
Oct 15 PHP
php+laravel 扫码二维码签到功能
May 15 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数据库抽象层 PDO
2011/05/07 PHP
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
php中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
jQuery 锚点跳转滚动条平滑滚动一句话代码
2010/04/30 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
2013/11/26 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
jQuery EasyUI API 中文帮助文档和扩展实例
2016/08/01 Javascript
深入理解vue路由的使用
2017/03/24 Javascript
vue-swiper的使用教程
2018/08/30 Javascript
微信小程序中为什么使用var that=this
2019/08/27 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
vue实现简单加法计算器
2020/10/22 Javascript
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
Python中的jquery PyQuery库使用小结
2014/05/13 Python
深入解答关于Python的11道基本面试题
2017/04/01 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
2019/08/08 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
2020/03/30 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
2020/04/22 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
基于Modernizr 让网站进行优雅降级的分析
2013/04/21 HTML / CSS
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
春秋航空官方网站:Spring Airlines
2017/09/27 全球购物
德国Discount-Apotheke中文官网:DC德式康线上药房
2020/02/18 全球购物
失业者真诚求职信范文
2013/12/25 职场文书
应届毕业生个人求职自荐信
2014/01/06 职场文书
勤俭节约演讲稿
2014/05/08 职场文书
药剂专业自荐书
2014/06/20 职场文书
社区关爱留守儿童活动方案
2014/08/22 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书
索尼ICF-36收音机评测
2022/04/30 无线电