VERIFICADOR DE CPF EM NCURSES
Publicado por Thiago 07/03/2006
[ Hits: 7.541 ]
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; }
3025 -> 30 + 25 = 55 -> 55*55 = 3025
Ordenação Topológica com Digrafos
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Instalar driver Nvidia no Debian 13
Redimensionando, espelhando, convertendo e rotacionando imagens com script
Debian 13 Trixie para Iniciantes
Convertendo pacotes DEB que usam ZSTD (Padrão Novo) para XZ (Padrão Antigo)