VERIFICADOR DE CPF EM NCURSES

Publicado por Thiago 07/03/2006

[ Hits: 7.382 ]

Download verificacpf.c




Leiam a observação na parte comentada do algoritmo.
Sugestões são bem aceitas.
Caso encontrem erros me informem e demonstrem soluções.
Ficarei satisfeito em aprender mais com vcs.
Abraço a todos.

  



Esconder código-fonte

/*
 * Programa: verificacpf.c
 * Autor: thiagoamm
 * Data: 06/03/06
 * OBS: Esse programa e essecialmente baseado em algoritmo testado no laboratorio
 * da Universidade.
 * Atraves dele estuda-se o conceito de modularizacao.
 * Estao sendo usadas variaveis globais propositalmente para nocao do conceito
 * de escopo e consequentemente deixando um guancho para o topico (parametros). * 
 *  
 */

#include <ncurses.h>
#include <string.h>

/* Cabecalho de funcoes e subrotinas */
void calcdig(void);

/* Variaveis globais */
int aux,dc;

/* Modulo principal */
int main(void)
{
  long int cpf;
  int d1,d2,n9;
  char sair;
  char titulo[] = {"._.**.._.*%%*., VERIFICADOR DE CPF ,.*%%*._..**._."};  
  WINDOW *wstd, *j1, *jmsg, *jsair;  
  /* Iniciando modo ncurses */
  initscr(); 
  j1 = newwin(3,60,7,20);
  wstd = newwin(15,60,10,20);
  jmsg = newwin(5,20,15,40);
  jsair = newwin(3,40,1,30);
  start_color();
  init_pair(1,COLOR_GREEN,COLOR_BLACK);
  init_pair(2,COLOR_YELLOW,COLOR_BLUE);
  init_pair(3,COLOR_RED,COLOR_BLACK);
  init_pair(4,COLOR_BLUE,COLOR_BLACK);
  wbkgd(j1,COLOR_PAIR(2) | A_BOLD);
  wbkgd(wstd,COLOR_PAIR(1) | A_BOLD);    
  box(j1,0,0);
  box(wstd,0,0);
  
  sair = 'n'; // Flag.
  do
  { 
    mvwprintw(j1,1,5,"%s",titulo);
    wrefresh(j1);     

    mvwprintw(wstd,2,2,"Informe seu CPF: ");
    mvwscanw(wstd,2,19,"%ld",&cpf);

    d2 = cpf % 10;
    d1 = (cpf / 10) % 10;
    n9 = (cpf / 10) / 10;
    aux = n9;
    calcdig(); // Chamando a subrotina.
  
    if (dc == d1)
    {
      aux = n9 * 10 + dc;
      calcdig();

      if (dc == d2)
      {
        wbkgd(jmsg,COLOR_PAIR(4) | A_BOLD);
        box(jmsg,0,0);
        mvwprintw(jmsg,2,2,"   CPF VALIDO");
        wrefresh(jmsg);      
      }
      else
      {
        wbkgd(jmsg,COLOR_PAIR(3) | A_BOLD);
        box(jmsg,0,0);
        mvwprintw(jmsg,2,2,"  CPF INVALIDO!");
        wrefresh(jmsg);
      }
    }   
    else 
    {
      wbkgd(jmsg,COLOR_PAIR(3) | A_BOLD);
      box(jmsg,0,0);
      mvwprintw(jmsg,2,2,"  CPF INVALIDO!");
      wrefresh(jmsg);
    }            
    wbkgd(jsair,COLOR_PAIR(1));
    box(jsair,0,0);
    mvwprintw(jsair,1,2,"Deseja sair ? (s / n): ");
    mvwscanw(jsair,1,24,"%c",&sair);    
    wclear(jsair);
    wrefresh(jsair);
    mvwprintw(wstd,2,19,"                                  ");    
    wclear(jmsg);
    wrefresh(jmsg);    
  } while (sair != 's');

  /* Finalizando modo ncurses */
  endwin();  
  return(0);
}


/* Implementando a subrotina */
void calcdig(void)
{
  int cont = 2, s = 0, n;
  
  while (aux != 0)
  {
    n = aux % 10; // resto de divisao inteira.
    s = s + n * cont;
    cont++;
    aux = aux / 10; // quociente de divisao inteira.
  }
  s = s * 10;
  dc = s % 11;
  
  if (dc == 10)
    dc = 0;
}

Scripts recomendados

Ler string invertida

Fibonacci - Modo muito simples

ponteirostrab.c - Trabalhando com ponteiros

funcsoma.c - Soma 2 números

Convertendo dias para anos.


  

Comentários
[1] Comentário enviado por humbhenri em 07/03/2006 - 19:58h

Não entendi como ele calcula a validez do cpf, que eu saiba tem algo a ver com os dígitos verificadores. Entrei com meu cpf tanto com eles como sem eles e deu cpf inválido

[2] Comentário enviado por thiagoamm em 07/03/2006 - 20:10h

********************** AVISO ******************************
Galera esse programa utiliza a biblioteca ncurses.h e só funciona no linux (desde que este possua a ncurses em sua coleção de bibliotecas), caso não tenha procure no google, baixe o pacote e instale.
O PROGRAMA NÃO ACEITA CPF COM CARACTERES ESPECIAIS (OS PONTOS E O TRAÇO). Ex: Ao invés de informar um cpf xxx.xxx.xxx-xx, informe xxxxxxxxxxx

[3] Comentário enviado por thiagoamm em 15/11/2007 - 00:22h

Este programa tá bugado.
Vou corrigí-lo.
Me desculpem.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts