Heim > php教程 > php手册 > PHP数字和字符串ID互转函数(类似优酷ID)

PHP数字和字符串ID互转函数(类似优酷ID)

WBOY
Freigeben: 2016-06-06 20:20:37
Original
1433 Leute haben es durchsucht

这篇文章主要介绍了PHP数字和字符串ID互转函数,生成的字符串ID类似优酷的视频ID,像一个加密过的数字ID,本文函数可以在数字ID和字符串ID间相互转换,需要的朋友可

不知道你注意了没有,类似优酷、腾讯视频等其他视频链接似乎类似这样的

复制代码 代码如下:




注意id_xxx那段,是不是看不懂了,但你无可否认这个就是id,这不国外的一位牛人早在09年就写了针对PHP/Python/Javascript/Java/SQL的生成方法,可见我现在是多么的落伍,下面我把代码贴出来,希望分享精神永存。

复制代码 代码如下:


/** 
 * @author   Kevin van Zonneveld
 * @author   Simon Franz
 * @author   Deadfish
 * @copyright 2008 Kevin van Zonneveld ()
 * @license   New BSD Licence
 * @version   SVN: Release: $Id: alphaID.inc.php 344 2009-06-10 17:43:59Z kevin $
 * @link  
 *
 * @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 ()
      // you can optionally supply a password to make it harder
      // to calculate the corresponding numeric 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) {
      // Digital number                $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;
}

使用举例

复制代码 代码如下:

alphaID(9007199254740989);


执行结果将被返回“fE2XnNGpF”,我们可以把它认为是加密,,进行反解密则

复制代码 代码如下:

alphaID('fE2XnNGpF', true);


那么就转换成真实的数字“9007199254740989”。方法还可以支持使用key进行加密,使得别人无法解得你真实的ID。
Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage