ID is a frequent occurrence in the Web site, it is usually a number, but we found that many of the current site IDs are letters, such as YouTube video playback page its URL similar to/WATCH?V=YZNJIBEDYWW. Here is a way to generate an alphabetic ID.
Use examples:
Copy Code code as follows:
Alphaid (12354);//converts numbers to letters.
Alphaid (' Ppqxn7cof ', true);//will convert the letter ID to the corresponding number.
Alphaid (12354,false,6);//Specifies that the length of the generated letter ID is 6.
Source:
Copy Code code as follows:
<?php
/**
* Translates a number to a short alhanumeric version
*
* Translated any number up to 9007199254740992
* To a shorter version in letters e.g.:
* 9007199254740989--> PPQXN7COF
*
* Specifiying The second argument true, it would
* Translate back e.g.:
* PPQXN7COF--> 9007199254740989
*
* This function is based on Any2dec && Dec2any by
* Fragmer[at]mail[dot]ru
* see:http://nl3.php.net/manual/en/function.base-convert.php#52450
*
* If you are want the alphaid to is at least 3 letter long and use the
* $pad _up = 3 argument
*
* In most cases the this is better than totally random ID generators
* Because this can easily avoid duplicate ID ' s.
* For example if your correlate the Alpha ID to a auto incrementing ID
* In your database, "re done."
*
* The reverse is do because it makes it slightly more cryptic,
* But it also makes it easier to spread lots the IDs in different
* Directories on your filesystem. Example:
* $part 1 = substr ($alpha _id,0,1);
* $part 2 = substr ($alpha _id,1,1);
* $part 3 = substr ($alpha _id,2,strlen ($alpha _id));
* $destindir = "/". $part 1. " /". $part 2." /". $part 3;
*//By reversing, directories are more evenly spread out. The
*///directories already occupy main levels
*
* More info on limitation:
*-http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/165372
*
* If you are really need this for bigger numbers your probably to look
* at things like:http://theserverpages.com/php/manual/en/ref.bc.php
* or:http://theserverpages.com/php/manual/en/ref.gmp.php
* But I haven ' t really dugg into this. If you are have more info on those
* Matters feel free to leave a comment.
*
* @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 was to just make the
ID Short-and isn't so much secure,
With the patch by Simon Franz (http://blog.snaky.org/)
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 <<--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, 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;
}