Ir para conteúdo

POWERED BY:

Arquivado

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

Raniel

Gerar código apenas com números

Recommended Posts

time() ... pra ter o mesmo numero soh ceh for criado no mesmo minuto segundo e tal... em localhost eh bastante provavel que aconteça ... em servidores acho dificil... mas pra garanti concatena com mais um numero ... e pra dexa a quantia de caracter que você quer da pra usa substr... exemplo

 

$a= time();
$numero = substr($a,4,10).'1';

$aa= time();
$numero2 = substr($aa,4,10).'2';

valww espero ter ajudado

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu uso

 

md5(uniqid(time()));

 

assim tem muito mais chance de "nunca" repetir minha chave, pq 32 digitos do md5 alem de seguranca tem o uniqid

Compartilhar este post


Link para o post
Compartilhar em outros sites

nenhum das respostas enquandram-se nas especificações

 

- código único

- 8 caracteres

- somente numerico

 

 

: md5 e uniqid geram alfanumericos

: utilizar substr() para cortar a string poderá aumentar probabilidade de repetição do id

 

pesquise por técnicas de "Service Tag".

 

empresas de gande porte utilizam "Service Tag" apra facilicar a leitura e compreensão de um código de barras, por exemplo.

 

Serviço de Service Tag da DEll:

http://support.dell.com/support/topics/glo...l=en&s=hied

http://support.dell.com/support/topics/glo...amp;~mode=popup

 

interessante script que converte o service tag da Dell

http://www.powerdog.com/dellconv.cgi

 

outro link no forum

http://forum.imasters.com.br/index.php?showtopic=266543

Compartilhar este post


Link para o post
Compartilhar em outros sites

pq nao poen logo 10 caracters no campo usa time() e deu... nao vai precisa faze tanta ganbiara .... pois o dia 07 do 04 de 2009 as 10 e 40 aos 41 segundos ...nunca mais vai se repeti ^^ oq pod acontece como eu dise eh você cadastra mais de um registro e o sistema executa os dois no mesmo segundo ... ae ele se repetiria... mas como ja mostrei no post anterior eh so concatena mais um algarismo diferente em cada e deu ... garantido ( a nao ser que encontre a " maquina do tempo "^^ ) que nao vai se repeti ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

é gambiarra, é sujo, é porco mais funciona se for sistema pequeno pega nada =x

 

gera um numero com microtime, pega os 8 ultimos algo do tipo checa o banco se tiver gera outro =x

 

algo 100% que garanta NUNCA repetir é algo trabalhoso, essa forma ai acho que já resolve, mais se o sistema é muito grande, do tipo que vai receber muitos inserts simultâneos, não recomendo, enfia a cara para uma solução melhor...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá pessoal,

Complementei esta função aqui, e pelo que andei vendo a possibilidade de um acerto é muito pequena.

<?php
function make_seed()
{
	list($usec, $sec) = explode(' ', microtime());
	return (float) $sec + ((float) $usec * 100000);
}
mt_srand(make_seed());
$randval = mt_rand(11111,99999);
$randval2 = mt_rand(9999,1111);
$hr = date('s');

$codigo = "$randval"."$randval2"."$hr";
echo "$codigo";
?>

Isto será usado na inserção de um cliente no banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

resumindo esse code, ficaria assim:

 

function foo()
{
	return mt_rand(11111,99999) . mt_rand(9999,1111) . date('s');
}
echo foo();

fiz alguns testes simples

 

num teste com 400 mil loops, houve 1 duplicado

em outros testes com 100 mil loops, muitas vezes nao gerava nenhum duplicado, porém, as vezes retornava 1 ou 20 duplicados

em testes com 1000 loops a mesma coisa.

 

Apesar de incidências baixas, cada teste foi feito separadamente, correndo em tempo real, sem comparar com dados já testados em cada loop.

É um método bastante inseguro, pois assim comos números, as chances de erro também são aleatórias.

 

Outra desvantagem está no uso de IDs longos. A indexação de registros se torna mais lenta.

 

 

Isto será usado na inserção de um cliente no banco de dados

mesmo numa empresa multinacional,

um banco de dados com 600 milhões de clientes é muito.

 

sites como facebook, orkut, myspace possuem +- essa quantidade de cadastros, incluindo contas inativas

 

um campo autoincrement com 9 casas seria suficiente para suportar até 999.999.999 cadastros

 

 

veja o que for viável para o seu caso

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.