Arquivos da categoria: Algoritmos Geradores

Algoritmo Gerador de CNPJ em C


//================================================================
// Nome Do Arquivo: cnpj.c
// File Name: cnpj.c
//
// Descrição: Implementação do algoritmo gerador de cnpj
//================================================================

// Protótipo da função geradora de CNPJ
int* cnpj_generator();

// Libs
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// Função main
// Main Function
int main(int argc, char** argv)
{
 int *cnpj, i;

 // Inicia o gerador de números aleatórios
 srand(time(NULL));

 // Gera um cpf aleatório
 cnpj = cnpj_generator();

 // Imprime o cnpj gerado na tela
 for(i = 0; i < 14; i++) {
 printf("%d", cnpj[i]);
 }
 printf("n");

 system("pause");

 // Libera a memória usada para o cnpj
 free(cnpj);
 return 0;
}

// Função Geradora de CNPJ
int* cnpj_generator() {
 int *cnpj, pesos[14], vetSoma[14], soma, resto, digito, i;

 // Aloca memória para o cnpj
 cnpj = (int *) malloc(sizeof(int) * 14);

 // Gera 12 números aleatórios
 for(i = 0; i < 12; i++) {
 cnpj[i] = rand() % 10;
 }

 // Cálculo do primeiro dígito verificador

 // Gera os 12 pesos
 for(i = 0; i < 4; i++) {
 pesos[i] = 5 - i;
 }
 for(i = 4; i< 12; i++) {
 pesos[i] = 13 - i;
 }

 // Multiplica os valores de cada coluna
 for(i = 0; i < 12; i++) {
 vetSoma[i] = cnpj[i] * pesos[i];
 }

 // Calcula o somatório dos resultados
 soma = 0;
 for(i = 0; i < 12; i++) {
 soma += vetSoma[i];
 }

 // Realiza-se a divisão inteira do resultado por 11
 resto = soma % 11;

 // Verifica o resto da divisão
 if(resto < 2) {
 digito = 0;
 } else {
 digito = 11 - resto;
 }

 // Adiciona o 1º dígito verificador ao cpf
 cnpj[12] = digito;

 // Cálculo do segundo dígito verificador

 // Gera os 13 pesos
 for(i = 0; i < 5; i++) {
 pesos[i] = 6 - i;
 }
 for(i = 5; i< 13; i++) {
 pesos[i] = 14 - i;
 }

 // Multiplica os valores de cada coluna
 for(i = 0; i < 13; i++) {
 vetSoma[i] = cnpj[i] * pesos[i];
 }

 // Calcula o somatório dos resultados
 soma = 0;
 for(i = 0; i < 13; i++) {
 soma += vetSoma[i];
 }

 // Realiza-se a divisão inteira do resultado por 11
 resto = soma % 11;

 // Verifica o resto da divisão
 if(resto < 2) {
 digito = 0;
 } else {
 digito = 11 - resto;
 }

 // Adiciona o 2º dígito verificador ao cpf
 cnpj[13] = digito;

 return cnpj;
}

Algoritmo Gerador de CPF em C

//================================================================
// Nome Do Arquivo: cpf.c
// File Name: cpf.c
//
// Descrição: Implementação do algoritmo gerador de cpf
//================================================================

// Libs
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

// Protótipo da função geradora de CPF
int* cpf_generator();

// Função main
// Main Function
int main(int argc, char** argv)
{
 int *cpf, i;
 
 // Inicia o gerador de números aleatórios
 srand(time(NULL));
 
 // Gera um cpf aleatório
 cpf = cpf_generator();
 
 // Imprime o cpf gerado na tela
 for(i = 0; i < 11; i++) {
  printf("%d", cpf[i]);
 }
 printf("n");
 
 system("pause");
 
 // Libera a memória usada para o cpf
 free(cpf);
 return 0;
}

// Função Geradora de CPF
int* cpf_generator() {
	int *cpf, pesos[11], vetSoma[11], soma, resto, digito,  i;
	
	// Aloca memória para o cpf
	cpf = (int *) malloc(sizeof(int) * 11);
	
	// Gera 9 números aleatórios
	for(i = 0; i < 9; i++) {
		cpf[i] = rand() % 10;
	}
	
	// Cálculo do primeiro dígito verificador
	
	// Gera os 9 pesos
	for(i = 0; i < 9; i++) {
		pesos[i] = 10 - i;
	}
	
	// Multiplica os valores de cada coluna
	for(i = 0; i < 9; i++) {
		vetSoma[i] = cpf[i] * pesos[i];
	}
	
	// Calcula o somatório dos resultados
	soma = 0;
	for(i = 0; i < 9; i++) {
		soma += vetSoma[i];
	}
	
	// Realiza-se a divisão inteira do resultado por 11
	resto = soma % 11;
	
	// Verifica o resto da divisão
	if(resto < 2) {
		digito = 0;
	} else {
		digito = 11 - resto;
	}
	
	// Adiciona o 1º dígito verificador ao cpf
	cpf[9] = digito;
	
	// Cálculo do segundo dígito verificador
	
	// Gera os 10 pesos
	for(i = 0; i < 10; i++) {
		pesos[i] = 11 - i;
	}
	
	// Multiplica os valores de cada coluna
	for(i = 0; i < 10; i++) {
		vetSoma[i] = cpf[i] * pesos[i];
	}
	
	// Calcula o somatório dos resultados
	soma = 0;
	for(i = 0; i < 10; i++) {
		soma += vetSoma[i];
	}
	
	// Realiza-se a divisão inteira do resultado por 11
	resto = soma % 11;
	
	// Verifica o resto da divisão
	if(resto < 2) {
		digito = 0;
	} else {
		digito = 11 - resto;
	}
	
	// Adiciona o 2º dígito verificador ao cpf
	cpf[10] = digito;
	
	return cpf;
}