Pergunta

Oi eu sou a criação de um sistema de processos e IDENTIFICAÇÃO e um UIDO, O UID, estamos gerando aleatoriamente, mas eu sou um pouco preso, eu preciso sempre gerar um UID que atualmente não existe no banco de como o campo é um campo exclusivo usado no front-end, de modo a não expor o real ID.

Então, para recapitular, eu estou tentando gerar um id exclusivo que não existem atualmente no DB a parte que eu não tenho o trabalho é a verificação cruzada em db por isso, às vezes, vai dar um número que já existe no banco, mesmo que ele não deve obrigado antecipadamente.

Este é o meu código até agora:

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;

    }

}

}
Foi útil?

Solução 6

Eu descobri que o problema já foi, Como mencionei a todos a geração de código não era o problema!O problema foi que a cruz de seleção não estava a funcionar correctamente.Então tudo que eu fiz foi removido esse loop

while($i < $characters) 
{ 

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

}

Como isso fazia com que o meu ID exclusivo para acabar errado.

Outras dicas

Para gerar unic UID você pode usar o tempo, eu acho que foi uma muito pequena chanse de que os registros serão adicionados no mesmo segundo, com dois dados aleatórios.

escrever uma função que retorne a você como que

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

No PHP existe uma função chamada uniqid()

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

Eu poderia falar sobre a geração de ids, como os outros fizeram, mas esta não é a sua pergunta.Sua consulta, parece-me bem.Se ela retorna 0 linhas, mas você parece achar o código no banco de dados, então o mais provável é que ele só tem a mesma aparência, mas na verdade não é.Poderia ser preenchido por espaços em branco.

Uma maneira de resolver isso é selecionando a última linha do seu banco de dados de usuário e ter o seu script para verificar o campo de identificação (você pode conseguir isso através da realização de uma escolha ordenar por ID descendente modo), em seguida, você pode usar essa informação para randomize números maior que o ID.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top