Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá caros colegas!
Ultimamente uma dúvida está perturbando meu juízo. Eu criei o código abaixo que gera uma identificação com 5 números e letras para identificar as linhas de uma tabela (MySQL):
function randomizer($algarismos = 2){
//Array com as letras
$letras = array('A','B','C','D','E','F','G','H','I','J',
'K','L','M','N','O','P','Q','R','S','T',
'U','V','W','X','Y','Z');
//Array sem o zero para o primeiro algarismo
$numeros[0] = array(1,2,3,4,5,6,7,8,9);
//Array com o zero para os demais algarismos
$numeros[1] = array(0,1,2,3,4,5,6,7,8,9);
$fim = '';
//Cria a primeira letra
shuffle($letras);
$fim .= $letras[0];
//Cria a segunda letra
shuffle($letras);
$fim .= $letras[0];
//Cria o primeiro algarismo
shuffle($numeros[0]);
$fim .= $numeros[0][0];
//Cria os demais algarismos
for( $i = 0; $i < $algarismos; $i++ ){
shuffle($numeros[1]);
$fim .= $numeros[1][0];
}
return $fim;
}
echo randomizer();Ela será impressa em uma etiqueta, e colada em livros para identificá-los. Acontece que cada vez que um novo livro precisar ser inserido na tabela, um código aleatório novo precisa ser criado para identificá-lo, e eu não sei comofas para que o código gerado não se repita, entrando assim em conflito com um já existente.
Eu tive a ideia de fazer um loop pra verificar na tabela se esse código gerado já existe, e que só parasse quando encontrasse um valor ainda não usado. Mas ficaria meio lerdo, caso a tabela tenha muitos registros, certo?
Alguém tem uma ideia melhor?
[]'s ;)
Seria mais racional eu colocar o campo como chave primária e verificar com o loop se o código já existe, ou criar uma tabela com os códigos previamente gerados em ordem, atribuindo um valor bool pra cada um, dizendo se já está em uso ou não e evitando ter de gerar um código na hora?
Por que tem que ser aleatório? Seria mais fácil fazer um identificador sequencial...
#4 acho que o intuito é exibir um tagcode para o cliente.
Se for isso, é o exemplo do post #2.
A utilidade disso, que inclusive muitas empresas de grande e médio porte usam, é para facilitar a leitura visual, principalmente para atendimento e suporte a clientes.
outro jeito é gerar códigos como dos encourtadores de url, youtube, etc. Porém, é menos "user-friendly"
http://forum.imasters.com.br/topic/427112-criptografar-o-get-no-php
A utilidade disso, que inclusive muitas empresas de grande e médio porte usam, é para facilitar a leitura visual, principalmente para atendimento e suporte a clientes.
Desculpe a ignorância, hinom, mas que 'facilitação de leitura visual' é essa?
não sei se você já trabalhou com multinacionais ou empresas de grande porte.
mas, repare por exemplo, nas caixas de produtos da DELL, IBM, importadoras trans-atlânticas, etc..
Possui um código, que é apelidado de "dell tag code" no caso da DELL.
É um tipo de formatação limitada a alguns bits para facilitar a leitura. Alguns usam base16 outros base32, enfim...
Imagine se o código dos produtos fossem sequenciais para empresas que movimentam milhões de produtos mensalmente.
Um código desse tamanho: 353456456476778856, para o cliente ler.
numa situação de atendimento ao cliente, por exemplo, o técnico do suporte pede ao cliente o número do produto.
Ao invés de encontrar um código enorme, o cliente enxergará (facilitação de leitura visual) um pequeno código de 5 a 8 dígitos "R6UT5B"
também há outras utilidades, mas isso é o básico.
espero que tenha entendido.
não sei se você já trabalhou com multinacionais ou empresas de grande porte.
Na verdade não... hehe... Mas meu notebook é dell e faz sentido o que você falou...
Mas ao invés de gerar um número aleatório como o autor deseja, não seria mais fácil gerar um código sequencial e só 'converter' para hexadecimal ou "trintaedoiscimal"?
Nós temos um problema com números aleatórios em computação, pois eles não são exatamente "aleatórios", são pseudo-aleatórios...
A solução seria depois que gerar o código, verificar no banco se ele existe antes de inserir. Se existir, gera um novo...
#8,
exato! é isso mesmo
na verdade esses códigos são sequenciais, mas apenas para imprimir ao cliente recebem essa máscara.
alguns preferem já gravar no banco o código sequencial codificado, pois ocupa menos espaço, apesar de ser pouca economia
Eu tive a ideia de fazer um loop pra verificar na tabela se esse código gerado já existe, e que só parasse quando encontrasse um valor ainda não usado. Mas ficaria meio lerdo, caso a tabela tenha muitos registros, certo?
Coloque o campo como INDEX que ajudará nesse problema...
>
na verdade esses códigos são sequenciais, mas apenas para imprimir ao cliente recebem essa máscara.
você sabe qual é a sequencia?
ja li que era algo como [h:d:m:Y:M:D] mas nada concreto
#11
Sim, talvez..
Mas pode ser o formato timestamp, pois ocupa 10 dígitos.
No PHP, a função time(): http://php.net/time
Particularmente uso o timestamp e, em casos mais extremos, o timestamp + algum aleatório de 3 a 5 dígitos ou algum outro algorítimo.
timestamp eu tb uso
mas me refiro a algo como controle de estoque, lote...
talvez seja idiota o que eu vou falar, mas ele não poderia dar um fwrite em um arquivo txt no servidor e criar um arquivo txt com os "códigos", assim ele faria uma pesquisa nesse arquivo toda vez que fosse gerar outro "código"...
estaria errado isso?
veja se ajuda:
http://forum.imasters.com.br/topic/266543-sistema-de-cadastro
http://forum.imasters.com.br/topic/339256-gerar-codigo-apenas-com-numeros