Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Douglas

ID único

Recommended Posts

Gostaria de saber se existe alguma função para criar 'ids únicos', ou seja um ID que não se repita com números e caracteres ASCII?

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse ai funciona direitinho

ele cria um id com letras e numeros

voce pode escolher o numero de caracteres para o id

 

depois ele verifica no banco de dados se já existe (voce deve configurar sua conexao e tabelas no bd) se existir ele faz um loop até encontrar um novo, que nao tenha sido cadastrado ainda

 

 

 

 

$tamanhol=numero de letras no id

$tamanhon=numero de numeros no id

 

PHP [/tr][tr]<?

function geraid($tamanhol=2,$tamanhon=2){

$this->tamanhol=$tamanhol;

$this->tamanhon=$tamanhon;

 

$this->letras="abcdefghijklmnpqrstuvwxyz";

for($i=0; $i<strlen($this->letras); $i++){

$this->letracar[$i]=$this->letras[$i];

}

srand((float)microtime()*1000000);

shuffle($this->letracar);

for($i=0; $i<$this->tamanhol; $i++){

$charnum=rand(1, count($this->letracar));

$this->final.=$this->letracar[$charnum-1];

}

 

 

$this->numeros="123456789";

for($i=0; $i<strlen($this->numeros); $i++){

$this->numerocar[$i]=$this->numeros[$i];

}

srand((float)microtime()*1000000);

shuffle($this->numerocar);

for($i=0; $i<$this->tamanhon; $i++){

$charnum=rand(1,count($this->numerocar));

$this->final.=$this->numerocar[$charnum-1];

}

 

return $this->final;

}

 

 

$id=geraid();

 

 

include"conectadb.php";

//verifica se o id já esta cadastrado, se ele já existe no bd

 

 

$query=mysql_query("SELECT `id` FROM `tabela` WHERE `id`='$id';",$con);

$idi=mysql_fetch_object($query);

 

if($idi){ //se ele existir, faz um loop até encontrar um que ainda não exista

while($idi){

$id=geraid();

$query=mysql_query("SELECT `id` FROM `tabela` WHERE `id`='$id';",$con);

$idi=mysql_fetch_object($query);

if($idi){

$idi=s;

}else{

$idi=NULL;

}

}

}

$idf=strtoupper($id);

?>

[/tr]

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom, o mais facil seria definir um numero de auto-incremento na propria bd:

 

create table teste(

id int(100) not null auto_increment,

primary key(id)

);

 

mas c você estiver querendo q o ID seja com numeros e letras, e de forma + aleatoria você pode fazer assim:

 

PHP [/tr][tr]

 

function gerar() {

$caracteres = "qwertyuioplkjhgfdsazxcvbnm0123456789"; //definimos os caracteres que serao usados

$qtd = strlen($caracteres) - 1; //contamos quantos caracteres existem e tiramos 1

$tamanhoID = 10; //dizemos aqui queremos que o id tenha 10 caracteres(coloque qtos você quizer)

$idFinal = ""; //declaramos a variavel em branco

 

while($i = 0; $i < $tamanhoID; $i++) { //loop para gerar o ID

$randNum = rand(0, $qtd); //geramos um numero entre 0 e $qtd

$idFinal .= $caracteres[$randNum]; //pegamos o caractere de numero $randNum na string $caracteres

}

 

return $idFinal;//retorna o ID gerado

}

 

$id = gerar();

 

while(mysql_num_rows(mysql_query("select id from tabela where id = '{$id}'")) > 0) {

$id = gerar();

}

//com isso ele vai gerar codigos aleatorios ateh encontrar um que n esteja sendo usado

 

mysql_query("insert into tabela (id) values ('{$id}');"); // isso vai inserir o novo valor

 

[/tr]

 

bom, espero q você tenha entendido a estrutura, qualquer coisa eh soh postar ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

no PHP existe uma função uniqid();é bastante usado quando faz upload de arquivos, para não conflitar com nomes iguais.exemplo de uso:<?echo uniqid(time());echo ""echo uniqid(time());?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas há a possibilidade de criar dois ids iguais?

nao!!!ele faz uma busca na tabela do banco de dadosse existir um igual ele entra num while, que gera um id novo e consulta pra ver se tem um igual até que gere um que ainda não esteja no banco de dados, esse será o usadoassim nunca terá um id igual ao outro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.