Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde gente, estou com a seguinte dificuldade.
Tenho pacotes de key/chaves que são geradas quando a pessoa seleciona essa pacote, por exemplo vai funcionar assim:
Pacotes:
100 chaves
200 chaves
300 chaves
até o pacote de 1000 chaves
cada um vai ter um valor em R$ separado, no caso ela terá que pagar para gerar algum pacote pra ela.
Como eu poderia fazer para quando a pessoa clicar no pacote de 100 chaves ele gerar as 100 chaves - códigos sei la, de uma forma que jamais vai repetir.
Estava testando aqui e fiz da seguinte forma:
$med5 = md5(time());
$time = time();
echo $med5;
echo " - ";
echo $time;
Gerando no caso um código tipo "0589f2ca0da78cc54b9915f43d25e232 - 1371139830"
Só que eu preciso gerar 100 as vezes 200 300 e assim vai até 1000 como eu fazeria isso para que ele possa gerar todo o código e que ele não se repita.
Pois eu sei que se eu fizer um WHILE ele vai gerar em milésimos então o parametro "time" pode ser que ele repita.
Aguem me da um help por favor ou alguma outra forma de fazer...
Amigo a maneira mais simples e eficaz de se fazer seria você por para o script dentro do while dá o tempo
sleep(1000);
Assim ele só faria de novo após 1 segundo.
>
Boa tarde gente, estou com a seguinte dificuldade.
Tenho pacotes de key/chaves que são geradas quando a pessoa seleciona essa pacote, por exemplo vai funcionar assim:
Pacotes:
100 chaves
200 chaves
300 chaves
até o pacote de 1000 chaves
cada um vai ter um valor em R$ separado, no caso ela terá que pagar para gerar algum pacote pra ela.
Como eu poderia fazer para quando a pessoa clicar no pacote de 100 chaves ele gerar as 100 chaves - códigos sei la, de uma forma que jamais vai repetir.
Estava testando aqui e fiz da seguinte forma:
$med5 = md5(time());
$time = time();
echo $med5;
echo " - ";
echo $time;
Gerando no caso um código tipo "0589f2ca0da78cc54b9915f43d25e232 - 1371139830"
Só que eu preciso gerar 100 as vezes 200 300 e assim vai até 1000 como eu fazeria isso para que ele possa gerar todo o código e que ele não se repita.
Pois eu sei que se eu fizer um WHILE ele vai gerar em milésimos então o parametro "time" pode ser que ele repita.
Aguem me da um help por favor ou alguma outra forma de fazer...
#3...
1000 chaves levaria 1000 segundos (16 minutos).. inviável..
Sim, pensei tambem no Sleep e 16 minutos vai acabar com o tempo do servidor, isso meio que tem que ser instantâneo, a função que o HIMON me passou, parece bem útil mais eu só não entendi o que seria as variáveis que ele colocou la...
por exemplo a "alphaID" e tambem a "customer_id"
Alguma explicação ?
sim inviável, na verdade eu criaria uma criptografia colocando ela em um loop de repetição para ser criada enquanto for igual a já existe dentro de um loop para verificar a quantidade de chaves enviadas. com esta quantidade de letras e números embaralhando-as sem padrão seria facil obter as mil chaves rapidamente mas se quer a lógica da data para recuperar depois não tenho idéia desculpe :)
HIMON não entendi o que seria as variáveis que ele colocou la em sua função...
por exemplo a "alphaID" e tambem a "customer_id"
O que seria ?
MaikeES, é que assim, não precisa ser exatamente a ideia da data la "time" eu utilizei ela, apenas por saber que ela nao repetiria de forma alguma, então qualquer sugestão seria muito viável para mim.
No entanto como ficaria esta função que vc citou ?
Criei uma função para você, só tem q fazer a verificação se as senhas geradas serão iguais a partir da função, segue o script abaixo.
<?php
function geraChave($tamanho = 8, $maiusculas = true, $Numeros = true)
{
$letraMinuscula = 'abcdefghijklmnopqrstuvwxyz';
$letraMaiuscula = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$numeros = '1234567890';
$caracteres = $letraMinuscula;
if ($maiusculas) $caracteres .= $letraMaiuscula;
if ($Numeros) $caracteres .= $numeros;
$len = strlen($caracteres);
for ($x = 1; $x <= $tamanho; $x++) {
$rand = mt_rand(1, $len);
if ($x == 1) $retorno = $caracteres[$rand-1];
$retorno .= $caracteres[$rand-1];
}
return $retorno;
}
?>
<?php
// Gera uma senha com 50 carecteres: letras (min e mai), números
$chave= geraChave(50,true, true);
// UmcAzwkq7rnjl1eUxow1Av9HoXoIRp7c4Z12sTCWrkek2ozGC1
echo $chave."<br />";
// Gera uma senha com 50 carecteres: letras (min), números
$chave2 = geraChave(50,false, true);
echo $chave2."<br />";// Gera uma senha com 50 carecteres: letras (min)
$chave3 = geraChave(50,false, false);
echo $chave3."<br />";?>
>
MaikeES, é que assim, não precisa ser exatamente a ideia da data la "time" eu utilizei ela, apenas por saber que ela nao repetiria de forma alguma, então qualquer sugestão seria muito viável para mim.
No entanto como ficaria esta função que vc citou ?
#5
alphaID() é uma função que está no links do post #2
$customer_id é apenas um exemplo.. seria o ID do cliente.
Pois, considerando que cada cliente possui um ID único, isso garantiria ao menos que o grupo de cchaves seja único..
O incremento $i é para garantir chaves únicas para o caso de time() repetir durante a execução.
Viocê pode trocar time por microtime(), mas isso deixaria a chave maior.. Prefira chaves com tamanho mais curto possível..
http://forum.imasters.com.br/topic/427112-criptografar-o-get-no-php/#entry1686364
o código desse topico gera uma string curta, como os parâmetros do youtube
para garantir que os códigos não se repitam, basta adicionar 1 incremento + o código do cliente + time
while( $i <= $limit ){note que há inúmeras formas de se resolver.
o exemplo acima é meramente ilustrativo.