Você está na página 1de 8

Universidade Federal de Minas Gerais

Instituto de Cincias Exatas


Departamento de Cincia da Computao
Programao Modular e Orientao a Objetos
Lista de Exercicio 01 Dgito Verificador
Aluno: Diogo Loureno Pinto

1. Descrio do problema
O CPF (Cadastro de Pessoas Fsicas) um documento necessrio a
todo cidado, sendo utilizado para identifica-los os junto Receita Federal. O
CPF composto por nove dgitos de identificao e dois dgitos de validao,
num total de onze dgitos. Neste trabalho, pretende-se desenvolver um
algoritmo capaz de calcular os dgitos verificadores bem como implementa-lo
na linguagem de programao Java. Para fins de utilizao e teste do algoritmo
em questo, o programa implementado permitir ao usurio gerar um CPF
vlido, verificar se um dado CPF vlido e encerrar a aplicao.

2. Algoritmo
Antes de iniciar o desenvolvimento do algoritmo, importante conhecer
os procedimentos para o clculo dos dgitos verificadores. Pode-se estabelecer
um formato para os nmeros do CPF, como mostrado a seguir.

Figura 1: Formato do CPF

As etapas para o clculo dos dgitos verificadores X e Y esto


sintetizados na figura 2. Os projetos do algoritmo que os calculam,
desenvolvido com base nas etapas da figura 2, so mostrados na figura 3. J o
algoritmo que valida um CPF est ilustrado na figura 4. Pode-se verificar que o
algoritmo de validao aproveita toda a rotina do algoritmo de clculo,
economizando memria e usando-se tcnicas de modularizao que
aumentam a eficincia e a legibilidade do programa.

Figura 2: Etapas para o clculo dos dgitos verificadores

Algoritmo CalcularDigitosVerificadores
{ Parmetros de entrada: CPF[1..9] numerico }
declare somaX, somaY, restoX, restoY, digitoX, digitoY, indice numrico
{ Clculo de X }
somaX 0
para indice 1 at 9 passo 1 faa
somaX somaX + CPF[indice]*(11 indice)
fim para
restoX somaX 11*(somaX/11)
se restoX = 0 ou restoX = 1 ento
digitoX 0
seno
digitoX 11 - restoX
fim se
{ Clculo de Y }
para indice 1 at 9 passo 1 faa
somaY somaY + CPF[indice]*(12 indice)
fim para
somaY somaY + digitoX*2
restoY somaY 11*(somaY/11)
se restoY = 0 ou restoY = 1 ento
digitoY 0
seno
digitoY 11 - restoY
fim se
{ Parmetros de retorno: CPF[1..9] + digX + digY }
fim algoritmo
Figura 3: Algoritmo para o clculo dos dgitos verificadores

Algoritmo validarDigitosVerificadores
{ Parmetros de entrada: CPF[1..11] numerico }
declare cpfValido logico
se CPF[1..11] = calcularDigitosVerificadores( CPF[1..9] ) ento
cpfValido verdadeiro
seno
cpfValido falso
fim se
{ Parmetros de retorno: cpfValido }
fim algoritmo
Figura 4: Algoritmo para a validao do CPF

3. Programa em Java
Os projetos dos algoritmos desenvolvidos na seo anterior foram
implementados na linguagem Java. Cada algoritmo possui um mtodo
correspondente. O mtodo main foi sintetizado de forma a unir as
funcionalidades de cada algoritmo e tratar as interfaces com o usurio da
aplicao. Aplicao esta que permite ao usurio calcular os dgitos
verificadores de um CPF dado e tambm verificar se um CPF de entrada
vlido. Tambm fornecida ao usurio a possibilidade de sair da aplicao. A
figura 5 apresenta o fluxograma da aplicao. Em seguida, a codificao em
Java.

Figura 5: Projeto do programa

4. Dados e resultados
A aplicao desenvolvida permite ao usurio gerar um CPF vlido a
partir de nove dgitos, verificar se um dado CPF vlido e finalizar o programa.
O sistema de interface com o usurio, constitudo por janelas e console,
mostrado nas figuras seguintes. Deve-se ressaltar que as interfaces podem ser
muito mais sofisticados e funcionais que as apresentadas neste projeto. Porm,
num primeiro instante, foram preteridas, pois no fazem parte dos objetivos do
trabalho proposto. A figura 6 reproduz o menu inicial do programa. Para as
duas opes, a janela para a entrada do CPF idntica figura 7. A sada de
dados desviada para o Console da IDE (Eclipse).

Figura 6: Menu Principal do programa

Figura 7: Janela de entrada do CPF

A lista abaixo apresenta a bateria de teste que foi realizada para a


validao da aplicao. Considerou-se que as entradas obedeceram os
padres pr-estabelecidos. Ou seja, no foi implementado nenhum tratamento
de erro, j que foge ao escopo da proposta do trabalho. Porm, deve-se
ressaltar que tal implementao deixaria a aplicao muito mais robusta e
estvel.

Clculo dos dgitos Verificadores

Validao do CPF CPF vlido

Validao do CPF CPF invlido

Final de execuo da aplicao

5. Concluses e observaes
O programa desenvolvido atendeu aos requisitos propostos pelo
exerccio, porm ainda no robusto. Certas situaes podem interromper de
maneia inesperada o software, como, por exemplo, se o usurio digitar letras
nos campos onde so exigidos nmeros. No desenvolvimento do programa,
utilizou-se uma metodologia de projeto que facilitou o desenvolvimento do
software. Esta metodologia consiste em basicamente projetar o algoritmo antes
de program-lo. Embora isto parea bvio, nem todos os programadores fazem
um projeto detalhado dos seus programas, o que dificulta a sua manuteno e
correo de eventuais inconsistncias. Desta forma, um aprendizado
importante adquirido com essa atividade prtica foi exatamente a importncia
de se projetar um programa antes de tentar implementa-lo, seja qual for a
linguagem de programao.