Raniel 0 Denunciar post Postado Abril 7, 2009 Olá pessoal, Gostaria de saber uma função bem simples para gerar códigos com tamanho de 8 dígitos; Agradeço. Compartilhar este post Link para o post Compartilhar em outros sites
lucaswxp 22 Denunciar post Postado Abril 7, 2009 <?php echo substr(md5(microtime()),0,8); ?> Compartilhar este post Link para o post Compartilhar em outros sites
Will Fernando 2 Denunciar post Postado Abril 7, 2009 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
Marlon Souza 0 Denunciar post Postado Abril 7, 2009 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
hinom 5 Denunciar post Postado Abril 7, 2009 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
Will Fernando 2 Denunciar post Postado Abril 7, 2009 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
Raniel 0 Denunciar post Postado Abril 7, 2009 Muito obrigado pessoal, vou testar os códigos. Compartilhar este post Link para o post Compartilhar em outros sites
felipebmfaria 1 Denunciar post Postado Abril 7, 2009 Amigao, uma outra alternativa RAND http://br2.php.net/manual/pt_BR/function.rand.php abçs. Compartilhar este post Link para o post Compartilhar em outros sites
Kamusz 2 Denunciar post Postado Abril 7, 2009 é 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
Raniel 0 Denunciar post Postado Abril 7, 2009 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
hinom 5 Denunciar post Postado Abril 8, 2009 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