首页  >  文章  >  php教程  >  PHP实现把数字ID转字母ID

PHP实现把数字ID转字母ID

WBOY
WBOY原创
2016-06-06 20:27:571404浏览

以下是对使用PHP把数字ID转字母ID的实现代码进行了详细的分析介绍,需要的朋友可以过来参考下

ID是网站中经常出现的,香港服务器租用,它一般是数字,但是我们发现现在的网站很多ID都是字母了,比如YouTube的视频播放页它的URL类似/watch?v=yzNjIBEdyww。 下面是一个生成字母ID的方法。
使用示例:

复制代码 代码如下:


   alphaID(12354);  //会将数字转换为字母。
   alphaID('PpQXn7COf',true);//会将字母ID转换为对应的数字。
   alphaID(12354,false,6);//指定生成字母ID的长度为6.


源码:

复制代码 代码如下:


/**
 * 将数字翻译成简短的字母数字版本
 *
 * 将 9007199254740992 以内的任何数字翻译成较短的字母版本,例如:
 * 9007199254740989 --> PpQXn7COf
 *
 * 指定第二个参数 true,它将
 * 翻译回来,例如:
 * PpQXn7COf --> 9007199254740989
 *
 * 此函数基于any2dec && dec2any by
 * fragmer[at]mail[dot]ru
 * 请参阅:#52450
 *
 * 如果您想要alphaID 至少为 3 个字母长,请使用
 * $pad_up = 3 参数
 *
 * 在大多数情况下,这比完全随机的 ID 生成器
 * 因为这可以轻松避免重复ID。
 * 例如,如果您将 alpha ID 与数据库中的自动递增 ID
 * 相关联,则完成。
 *
 * 执行相反的操作,因为它会使其稍微多一些神秘,
 * 但它也使得在文件系统上的不同
 * 目录中传播大量 ID 变得更容易。示例:
 * $part1 = substr($alpha_id,0,1);
 * $part2 = substr($alpha_id,1,1);
 * $part3 = substr($alpha_id,2, strlen($alpha_id));
 * $destindir = "/".$part1."/".$part2."/".$part3;
 * // 通过反转,目录分布得更均匀。
 * // 前 26 个目录已占据 26 个主要级别
 *
 * 有关限制的更多信息:
 * -
 *
 * 如果您确实需要更大的数字,您可以可能必须看看
 *之类的东西:
 *或:
 *但我还没有真正深入研究这一点。如果您有更多关于这些
 *问题,请随时发表评论。
 *
 * @author  Kevin van Zonneveld
 * @author  Simon Franz
 * @author  Deadfish
 * @copyright 2008 Kevin van Zonneveld ()
 * @license   新 BSD 许可证
 * @version   SVN:发布:$Id:alphaID.inc.php 344 2009-06-10 17:43:59Z kevin $
 * @link   
 *
 * @param mix   $in    要翻译的字符串或长输入
 * @param boolean $to_num  如果为 true
 * @ param mix   $pad_up  数字或布尔值将结果填充到指定长度
 * @param string  $passKey 提供密码会使计算原始 ID 变得更加困难
 *
 * @return 混合字符串或 long
 */
function alphaID($in, $to_num = false, $pad_up = false, $passKey = null)
{
  $index = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  if ($passKey !== null) {
    // 虽然此函数的目的只是使
    // ID 较短 - 并且不太安全,
    // 使用 Simon Franz 的此补丁 ()
    // 您可以选择提供密码以使其变得更加困难
    // 计算相应的数字 ID

    for ($n = 0; $n      $i[] = substr( $index,$n ,1);
    }

    $passhash = hash(' sha256',$passKey);
    $passhash = (strlen($passhash)       ? hash('sha512',$passKey)
      : $passhash;

    for ($n=0; $n       $p[] =  substr($passhash, $n ,1);
    }

    array_multisort($p,  SORT_DESC, $i);
    $index = implode($i);
  }

  $base  = strlen($index);

  if ($to_num) {
    // 数字      $in  = strrev( $in);
    $out = 0;
    $len = strlen($in) - 1;
    for ($t = 0; $t       $bcpow = bcpow($base, $len - $t);
      $out   = $out strpos($index, substr($in, $t, 1)) * $bcpow;
    }

    if (is_numeric($pad_up)) {
      $pad_up--;
      if ($pad_up > 0) {
        $out -= pow($base, $pad_up);
      }
    }
    $out = sprintf('%F', $out);
    $out = substr($out, 0, strpos($out, '.'));
  }else {
    // 数字 -->>  字母代码
    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); // 反转
  }

  return $out;
}

,美国服务器,美国服务器
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn