Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Scripts

Linux user

Publicado por Thiago em 07/03/2006    [ 4382 hits ]

Login: thiagoamm, 293997 pontos

   


Descrição

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.

[ Download: verificacpf.c ]   [ Enviar nova versão ]

[ 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
   Script Linux recomendado Soma de números através de strings
   Script Linux recomendado gerenciador de historico de comandos
   Script Linux recomendado Antecessor e sucessor
   Script Linux recomendado validaCPF
   Script Linux recomendado Lista ligada simples, algoritmos de inserção, busca e impressão

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


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.