Ver Mensaje Individual
  #18 (permalink)  
Antiguo 14/07/2011, 15:22
Avatar de pateketrueke
pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 1 mes
Puntos: 2534
Respuesta: Generar ID alfanumérico

Yo uso algo así:
Código PHP:
define('SHORTER_CHARSET''F5SGQPqprZmD0nlu4L8BfAKHCbgVNM2chkJeRix7vW6oY9yX1aE3twOdjUzTsI');
define('SHORTER_FIXNUM'1663200);

function 
do_hash($id)
{
  
$codeset SHORTER_CHARSET;
  
$base strlen($codeset);
  
$out '';
  
  
$id += SHORTER_FIXNUM;
  
  while (
$id 0)
  {
    
$out substr($codeset, ($id $base), 1) . $out;
    
$id floor($id $base);
  }
  return 
$out;
}

function 
do_id($hash)
{
  
$codeset SHORTER_CHARSET;
  
$base strlen($codeset);
  
$out 0;
 
  for (
$i strlen($hash); $i 0; --$i)
  {
    
$out += strpos($codesetsubstr($hash, (-* ( $i strlen($hash) )),1)) * pow($base$i -1);
  }
  
  
$out -= SHORTER_FIXNUM;
  
  return 
$out;

SHORTER_CHARSET es el conjunto de caracteres a emplear por la función, yo utilizo el abecedario completo y números.

Dicho conjunto de caracteres lo obtengo así:
Código PHP:
$str 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$str str_shuffle($str);
echo 
$str
La idea es que mientras mas desordenada sea la secuencia mas difícil es adivinar el siguiente ID generado, pues sería sencillo deducir que después de la A sigue la B.

SHORTER_FIXNUM se utiliza igualmente para "deformar" la percepción del usuario con respecto del ID actual, pues el primer ID sería tan solo un carácter, y eso no lo personal no me agrada.

El valor mínimo de dicha constante es relativo, pueden aumentarlo tanto como deseen.

Dicho valor no afecta en lo absoluto la conversión del ID numérico original.

NOTA: una ves implementado el script no conviene cambiar ninguna de estas configuraciones, ustedes entenderán.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.