VERIFICADOR DE CPF EM NCURSES
Publicado por Thiago 07/03/2006
[ Hits: 7.369 ]
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.
/* * 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; }
Simulador de cronometro com 2 digitos - otimizado
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Como atualizar o Debian 8 para o 10 (10)
Dica sobre iptables ACCEPT e DROP (6)
NGNIX - Aplicar SNAT para evitar roteamento assimetrico (29)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta