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

WBOY
Release: 2016-07-13 10:26:17
Original
1277 people have browsed it

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

复制代码代码如下:

http://v.youku.com/v_show/id_XNjA5MjE5OTM2.html

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

复制代码代码如下:

/**
* @author Kevin van Zonneveld
* @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 $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。

www.bkjia.com true http://www.bkjia.com/PHPjc/824744.html TechArticle 不知道你注意了没有,类似优酷、腾讯视频等其他视频链接似乎类似这样的 复制代码 代码如下: http://v.youku.com/v_show/id_XNjA5MjE5OTM2.html 注意...
Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!