Pregunta

Hola, estoy creando un sistema que procesa e ID y un UID, el uid que estamos generando al azar, pero estoy un poco atascado, necesito simplemente generar un UID que actualmente no existe en el DB como el campo es un campo.Campo único utilizado en la parte delantera para no exponer la identificación real.

Para volver a captar, estoy tratando de generar una identificación única que actualmente no existe en la DB, la parte que no tengo trabajo es la verificación cruzada en el DB, por lo que a veces le dará un número que ya existe en elDB aunque no debería agradecer de antemano.

Este es mi código hasta ahora:

function uniqueID($table) 
{
$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

$possible = '1234567890';
$code = '';
$characters = mt_rand(7,14);
$i = 0;

while($i < $characters) 
{ 

    $code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
    $i++;

}

$result = $db->query('
SELECT uniqueID
FROM '.$table.'
WHERE uniqueID = "'.$code.'"
LIMIT 1
');

$totalRows = $result->num_rows;

if(!$result)
{

    return $db->error;

}
else
{

    if($totalRows > 0)
    {

        return uniqueID($table);

    }
    else
    {

        return $code;

    }

}

}

¿Fue útil?

Solución 6

¡Me di cuenta de lo que era el problema ya, como mencioné a todos, la generación de código no era el problema!El problema fue que el control cruzado no funcionaba correctamente.Así que todo lo que hice fue eliminado este bucle

while($i < $characters) 
{ 

    $code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
    $i++;

}

A medida que esto estaba causando que mi identificación única terminara mal.

Otros consejos

Para generar uid unic puede usar el tiempo, creo que fue un chanse muy pequeño que los registros se agregarán en el mismo segundo, con dos datos aleatorios.

Escribe alguna función que le devuelve así

function generate_uid(){
 return md5(mktime()."-".rand()."-".rand());
}

en PHP Hay una función llamada uniqid()

http://php.net/manual/en/function.uniqid.php

Podría hablar de generar IDS, como lo hicieron los demás, pero esta no es su pregunta. Tu consulta parece estar bien.Si devuelve 0 filas, pero parece que encontrará el código en la base de datos, lo más probable es que solo se vea igual, pero en realidad no lo es.Podría ser acolchado por espacios en blanco.

Una forma de resolver Esto es seleccionando la última fila de su base de datos de usuarios y haga su script para verificar el campo ID (puede lograrlo realizando un pedido seleccionado por ID en modo descendiente), puede usar esa informaciónpara aleatorizar los números mayores que esa identificación.

editar

$result = $db->query('
SELECT uniqueID
FROM '.$table.'
');

$already_in_database = array();
while ($row = mysql_fetch_array($result)){
    $already_in_database[] = $row['UID'];    
}

$new = rand(0,$some_max_value);
while(in_array($new,$already_in_database)){
    $new = rand(0,$some_max_value);
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top