Hola de nuevo.
Con la solución que propones necesito una cadena de partida de X caracteres como entrada a la función de codificar. Podría coger esos X caracteres del email y codificar, pero he pensado otra cosa que creo que me viene mejor. Este sería el proceso:
- Si el usuario no tiene código asignado/almacenado generar (hasta que no exista colisión) uno con la función de generación aleatoria que más abajo detallo.
- Almacenar el código en el registro del usuario. cada usuario tendrá su código, con esa función y para un número relativamente alto de usuarios es dificil que exista colisión pues la semilla del random está basado un caracter temporal.
- Validar el usuario es fácil, simplemente comprobar el código que cada usuario tenga almacenado.
Esta es la función. Genera cadenas aleatorias de longitud X
(esta sacada de osCommerce)
Código PHP:
function tep_create_random_value($length, $type = 'mixed') {
// length es la longitud de la cadena aleatoria a devolver
// type puede ser (mixed,digits,chars)
if ( ($type != 'mixed') && ($type != 'chars') && ($type != 'digits')) return false;
$rand_value = '';
while (strlen($rand_value) < $length) {
if ($type == 'digits') {
$char = tep_rand(0,9);
} else {
$char = chr(tep_rand(0,255));
}
if ($type == 'mixed') {
if (eregi('^[a-z0-9]$', $char)) $rand_value .= $char;
} elseif ($type == 'chars') {
if (eregi('^[a-z]$', $char)) $rand_value .= $char;
} elseif ($type == 'digits') {
if (ereg('^[0-9]$', $char)) $rand_value .= $char;
}
}
return $rand_value;
}
function tep_rand($min = null, $max = null) {
static $seeded;
if (!isset($seeded)) {
mt_srand((double)microtime()*1000000);
$seeded = true;
}
if (isset($min) && isset($max)) {
if ($min >= $max) {
return $min;
} else {
return mt_rand($min, $max);
}
} else {
return mt_rand();
}
}
Espero estos comentarios hayan aportado un poco más de materia al tema.
Gracias por vuestra ayuda.