这不是随机的,根据您的数据库记录的ID.
怎么运行的:
基本上你有一个字符串是唯一的,但它可以解密代表一个数字,你应该把它看作一个简短的加密/解密.
您有一个函数可以使用唯一的ID,然后从该ID创建一个唯一的“短字符串”,然后可以反转该过程以从短字符串中获取唯一的ID.
这是一个我已经找到一个网站的剪辑:
- 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,1);
- }
- array_multisort($p,SORT_DESC,$i);
- $index = implode($i);
- }
- $base = strlen($index);
- if ($to_num)
- {
- // Digital number <<-- alphabet letter code
- $in = strrev($in);
- $out = 0;
- $len = strlen($in) - 1;
- for ($t = 0; $t <= $len; $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,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); //-> PpQXn7COf
- alphaID('PpQXn7COf',true); //-> 9007199254740989
这里有一个脚本链接:https://github.com/kvz/deprecated/blob/kvzlib/php/functions/alphaID.inc.php