Esto no es aleatorio, ya que se basa en el ID de su registro de base de datos.
como funciona:
, básicamente, que tienen una cadena que es único pero que se puede descifrar para representar un número, usted debe mirar como un cifrado corto/descifrado.
Tiene una función que tomaría una ID única y luego crea una "cadena corta" única de esa identificación, y luego puede revertir el proceso para obtener la identificación única de la cadena corta.
Aquí hay un cortado con tijeras he encontrado de un sitio web:
function alphaID($in, $to_num = false, $pad_up = false, $passKey = null)
{
$index = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
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, $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;
}
Ejemplo
alphaID(9007199254740989); //-> PpQXn7COf
alphaID('PpQXn7COf', true); //-> 9007199254740989
hay un enlace a la secuencia de comandos aquí: https://github.com/kvz/deprecated/blob/kvzlib/php/functions/alphaID.inc.php
pero esto podría llevar a una duplicación cuerdas (aunque no muy probable). – acme
¿Eso importa? Lo único que tendría que hacer es verificar para asegurarse de que sea único por algún método (como la búsqueda de base de datos, si se almacena de esa manera). – Alex