[Pedido] Optimizaзгo de um cуdigo.
#1

Bom, fiz um cуdigo para gerar cpf vбlido (nгo real e sim vбlido) e gostaria de saber se hб alguma forma para optimizar o mesmo..

PHP код:
stock GerarCPF()
{
    new 
cpf[100];
    new 
rand[9];
    new 
digito[12];
    new 
calculo[4];
    new 
rand_number[9][1] = { {1},{2},{3},{4},{5},{6},{7},{8},{9} };
    
    for(new 
i9; ++i)
    {
        
rand[i] = rand_number[random(sizeof rand_number)][0];
    }
    
    
digito[1] = rand[0] * 10;
    
digito[2] = rand[1] * 9;
    
digito[3] = rand[2] * 8;
    
digito[4] = rand[3] * 7;
    
digito[5] = rand[4] * 6;
    
digito[6] = rand[5] * 5;
    
digito[7] = rand[6] * 4;
    
digito[8] = rand[7] * 3;
    
digito[9] = rand[8] * 2;
    
    
calculo[0] = digito[1] + digito[2] + digito[3] + digito[4] + digito[5] + digito[6] + digito[7] + digito[8] + digito[9];
    
digito[10] = calculo[0] % 11;
    
calculo[1] = 11 digito[10];
    if(
digito[10] < 2)
    {
        
calculo[1] = 0;
    }
    
    
digito[1] = rand[0] * 11;
    
digito[2] = rand[1] * 10;
    
digito[3] = rand[2] * 9;
    
digito[4] = rand[3] * 8;
    
digito[5] = rand[4] * 7;
    
digito[6] = rand[5] * 6;
    
digito[7] = rand[6] * 5;
    
digito[8] = rand[7] * 4;
    
digito[9] = rand[8] * 3;
    
digito[10] = calculo[1] * 2;
    
    
calculo[2] = digito[1] + digito[2] + digito[3] + digito[4] + digito[5] + digito[6] + digito[7] + digito[8] + digito[9] + digito[10];
    
digito[11] = calculo[2] % 11;
    
calculo[3] = 11 digito[11];
    if(
digito[11] < 2)
    {
        
calculo[3] = 0;
    }
    
    
format(cpf50"%d %d %d %d %d %d %d %d %d %d %d"rand[0], rand[1], rand[2], rand[3], rand[4], rand[5], rand[6], rand[7], rand[8], calculo[1], calculo[3]);
    print(
cpf);
    return 
strval(cpf);

OBS: Quem quiser utilizar o script nгo tem problema algum sу peзo os crйditos.
Reply
#2

Este seu estб muito mal otimizado, e muitos codes desnecessбrios, olha como eu faria:
PHP код:
stock GerarCPF()
{
    new 
D[11];
    for(new 
011i++) 
    {
          
D[i]= random(10);
    }
    return 
D[0]+D[1]*10+D[2]*100+D[3]*1000+D[4]*10000;// continua atй o "+D[10]*10 000 000 000"

Reply
#3

CPF Vбlido й um cpf que existe? ou aleatуrio...
Reply
#4

Quote:
Originally Posted by RazorGuigo
Посмотреть сообщение
Este seu estб muito mal otimizado, e muitos codes desnecessбrios, olha como eu faria:
PHP код:
stock GerarCPF()
{
    new 
D[10];
    for(new 
010i++) 
    {
          
D[i]= random(10);
    }
    return 
D[0]+D[1]*10+D[2]*100+D[3]*1000+D[4]*10000;// continua atй o "+D[9]*1000 000 000"

Esse seu script nгo gera os 11 dнgitos e nгo й vбlido.
Quote:
Originally Posted by TheBob
Посмотреть сообщение
CPF Vбlido й um cpf que existe? ou aleatуrio...
Um CPF vбlido pode ser utilizado para se cadastrar em sites que pedem o mesmo mas ele nгo pertence a uma pessoa fнsica.. Sendo um CPF aleatуrio.
Reply
#5

Ah sim, conheзo APIs que verificam se o CPF informado й vбlido(existente)
Reply
#6

Pronto arrumei, agora tem 11 digitos
Reply
#7

Vocк terб que nesse caso usar uma string para retornar o CPF, pois caso o primeiro digito seja um zero ele irб ser apagado. cуdigo:
PHP код:
generateCPF()
{
    new 
str[20];
    
format(strsizeof(str), "%03d.%03d.%03d-%02d"random(1000), random(1000), random(1000), random(100));
    return 
str;

Reply
#8

Um CPF vбlido nгo й necessariamente um CPF existente. Se vocк quiser gerar CPFs vбlidos nгo basta apenas gerar nъmeros aleatуrios, como o cуdigo do Razor ou do Dayvison.

Eu sinceramente nem tentei entender o que vocк fez, mas a proposta foi bem interessante entгo eu fiz um aqui que gera tudo certo.

Vai perceber que eu escrevi praticamente o mesmo bloco de cуdigo duas vezes, vocк pode melhorar isso adicionando um loop geral.

PHP код:
new cpf[16],
        
cpfNumbers[11],
        
cpfCalculation[10],
        
cpfSum;
    for(new 
i=0ki<9i++)
    {
        
cpfNumbers[i] = random(9);
        
10-i;
        if(
22;
        
cpfCalculation[i] = cpfNumbers[i]*k;
    }
    for(new 
i=0i<9i++)
    {
        
cpfSum += cpfCalculation[i];
    }
    
cpfSum %= 11;
    if(
cpfSum 2)
        
cpfNumbers[9] = 0;
    else
        
cpfNumbers[9] = 11-cpfSum;
    
cpfSum 0;
    for(new 
i=0ki<10i++)
    {
        
11-i;
        if(
22;
        
cpfCalculation[i] = cpfNumbers[i]*k;
    }
    for(new 
i=0i<10i++)
    {
        
cpfSum += cpfCalculation[i];
    }
    
cpfSum %= 11;
    if(
cpfSum 2)
        
cpfNumbers[10] = 0;
    else
        
cpfNumbers[10] = 11-cpfSum;
    
format(cpfsizeof(cpf), "%d%d%d.%d%d%d.%d%d%d-%d%d",     cpfNumbers[0],
                                                            
cpfNumbers[1],
                                                            
cpfNumbers[2],
                                                            
cpfNumbers[3],
                                                            
cpfNumbers[4],
                                                            
cpfNumbers[5],
                                                            
cpfNumbers[6],
                                                            
cpfNumbers[7],
                                                            
cpfNumbers[8],
                                                            
cpfNumbers[9],
                                                            
cpfNumbers[10]);
    print(
cpf); 
Reply
#9

Quote:
Originally Posted by Dayvison_
Посмотреть сообщение
Vocк terб que nesse caso usar uma string para retornar o CPF, pois caso o primeiro digito seja um zero ele irб ser apagado. cуdigo:
PHP код:
generateCPF()
{
    new 
str[20];
    
format(strsizeof(str), "%03d.%03d.%03d-%02d"random(1000), random(1000), random(1000), random(100));
    return 
str;

era isso q eu ia falar ;-;
Boa Lуgica
Reply
#10

Quote:
Originally Posted by KinG7
Посмотреть сообщение
era isso q eu ia falar ;-;
Boa Lуgica
Mas continua nгo funcional o cуdigo dele. A lуgica para gerar um CPF vбlido requer um calculo um pouco prolongado.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)