2012-01-05 8 views
6

decir si quería dar a cada usuario que se registró en mi sitio una identificación única. Me parece que si quisiera hacer esto tendría que: Crear un número aleatorio para el ID, verificar si ese ID ya existe en la base de datos, si existe, crear otro número aleatorio y enviar otra consulta para ver si eso existe, y así sucesivamente ...PHP y mySQL (i): ¿Cómo generar una identificación de usuario aleatoria?

Esto podría continuar por años. Además de tener una identificación creciente, ¿hay alguna forma decente de hacerlo?

+2

Por qué no basta con utilizar un campo de incremento automático? ¿Realmente los usuarios necesitan (o les importa) que tengan algún hash complicado que los identifique, especialmente si es algo que nunca necesitan ver? –

+0

use un campo de autoincrement como su clave principal. eso es más o menos lo que todos hacen. – dqhendricks

+0

bien, se usará en la url como? Id = ##### y quería ser aventurero :-) –

Respuesta

2

La mejor manera de hacerlo es a través de la función de incremento automático, si realmente no desea usar una función como para poder usar uniqid();

Básicamente se genera una identificación única basada en milisegundos, si pones un prefijo un tanto único en la función, generará una identificación muy única.

echo uniqid('prefix'); 

De esta manera no tendrá que comprobar después de generar una identificación, si ya existe o no. Puedes estar seguro de que es único.

Para obtener más información, consulte esta url http://php.net/uniqid!

+1

+1 UNIQID es muy, muy poco probable que genere una colisión –

+0

si alguien se registrara al mismo tiempo, no lo haría ser atornillado?; p lol –

+1

No, simplemente use un prefijo aleatorio, por ejemplo: uniqid (rand(), verdadero). ¡Es muy poco probable que ocurra! – Wesley

0

Si tiene una cadena de 15 números que está buscando hasta 999 billones, dudo que se ejecutará durante "edades", teniendo en cuenta que hay casi 7 mil millones de personas en el planeta.

+0

Creo que significa mil millones de personas, no billones. –

+1

Jaja, quedé tan atrapado en billones de dólares, ¡gracias! editado – Michael

1

Puede usar la función rand(). Generará un número aleatorio entre dos.

rand(0000,9999) 

Se generará un número entre 0 y 9999.

Para comprobar si ya existe:

$id = rand(0000,9999); 

/* CREATE YOUR MYSQL CONNECTION */ 
$user_list = mysql_query("SELECT * FROM users"); 
while ($user = mysql_fetch_array($user_list)) 
{ 
    if ($id == $user['id']) 
    { 
     echo('Already exist.'); 
    } 
    else 
    { 
     /* YOUR CODE */ 
    } 
} 

Es la forma en que lo hice ...

+0

En su lugar, es mejor utilizar 'mt_rand'; para números con más aleatoriedad y también es más rápido – Matthew

+1

Necesita que el ID de usuario sea único. Debe actualizar su respuesta para demostrar cómo se podría hacer esto. –

+0

De hecho, pero es más fácil de usar rand() ... Creo ... Conozco esta función porque la uso para mi ID de blog ... –

1

primer todos, estoy de acuerdo con los comentarios. Es todo código de gastos generales, y si lo está usando para que parezca interesante, debería reconsiderar sus prioridades.

Pero, si aún lo necesita; aquí hay un poco de algo:

function uid() { 
    mt_srand((double)microtime()*1000000); 
    $token = mt_rand(1, mt_getrandmax()); 

    $uid = uniqid(md5($token), true); 
    if($uid != false && $uid != '' && $uid != NULL) { 
     $out = sha1($uid); 
     return $out; 
    } else { 
     return false; 
    } 
} 

Básicamente, se hace un montón de generación de números aleatorios para crear una ficha para uniqueid y, a continuación, es sha es eso. Probablemente sobrecarga, pero puede estar seguro de que nunca genera un doble uid.

Fabian.

+0

He intentado su código y generará 40 caracteres (quizás siempre). ¿Cómo puedo generar solo 15 o 20 caracteres? – RiefSapthana

0

¿La ID debe ser numérica? Al cambiar a caracteres alfabéticos obtendrá lote más entropía. Un número de 6 dígitos tiene 1,000,000 de posibilidades, una cadena alfanumérica de 6 caracteres es 2,176,782,336 posibilidades. Haz que sea un caso mixto alfanumérico y que salte a 15,625,000,000.

Así es como normalmente genero cadenas únicas que son lo más corto posible:

$chars = 'abcdefghijklmnopqrstuvwrxyzABCDEFGHIJKLMNOPQRSTUVWRXYZ'; 
mt_srand((double)microtime()*1000000); 

$id = ''; 
do { 
    $id .= $chars[mt_rand(0, strlen($chars) - 1)]; 
} while (isIdTaken($id)); 

var_dump($id); 

Tienes que crear una gran cantidad de artículos con este estilo de identificación, antes de que llegaremos a más de 3 o 4 caracteres.

0

Yo sé que es tarde para esta respuesta, pero la solución más fácil es generar números aleatorios y seguro que será único 100% es

$uid = uniqid().date("Ymdhhis"); 
Cuestiones relacionadas