Algoritmo para validação de CPF (dígitos verificadores) – Lógica de Programação
Validação de CPF com Portugol
O CPF (Cadastro de Pessoas Físicas) é um documento de identificação emitido pela Receita Federal aqui no Brasil, criado em 1970. Cada indivíduo residente no país (cidadãos brasileiros e estrangeiros residentes) possui um número único de CPF. Esse documento é essencial para diversas atividades e serviços, como por exemplo abertura de contas bancárias, realização de compras, emissão de documentos oficiais, declaração de imposto de renda, entre outros.
O CPF é composto por 11 dígitos e é utilizado para identificar cada pessoa de forma única. Os dois últimos dígitos do CPF são conhecidos como “dígitos verificadores” e são utilizados para verificar a validade do número.
Esses dígitos são calculados a partir dos nove primeiros dígitos do CPF, utilizando um algoritmo específico, que estudaremos a seguir.
Neste tutorial mostro como realizar o cálculo dos dígitos verificadores para validação de CPF, usando um algoritmo criado no Portugol Studio – e que você pode adaptar para a linguagem de programação que desejar.
Formato do CPF
| Estado Emissor | Dígito |
| DF, GO, MS, MT e TO | 1 |
| AC, AM, AP, PA, RO e RR | 2 |
| CE, MA e PI | 3 |
| AL, PB, PE e RN | 4 |
| BA e SE | 5 |
| MG | 6 |
| ES e RJ | 7 |
| SP | 8 |
| PR e SC | 9 |
| RS | 0 |
Como calcular os dígitos verificadores do CPF: Exemplo
Passo 1 – Calcular DV1:
Precisamos usar os nove primeiros dígitos do CPF para isso:
| 6 | 6 | 7 | 5 | 5 | 6 | 3 | 1 | 7 |
| 6 | 6 | 7 | 5 | 5 | 6 | 3 | 1 | 7 | x |
| 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | = |
| 60 | 54 | 56 | 35 | 30 | 30 | 12 | 3 | 14 |
60 + 54 + 56 + 35 + 30 + 30 + 12 + 3 + 14 = 294
Calculamos o módulo de 11 do resultado (resto da divisão inteira do resultado por 11):
294 % 11 = 8
Finalmente, subtraímos esse módulo de 11: 11 – 8 = 3
Assim, 3 é o dígito verificador 1 (DV1).
Passo 2 – Calcular DV2:
| 6 | 6 | 7 | 5 | 5 | 6 | 3 | 1 | 7 | 3 |
| 6 | 6 | 7 | 5 | 5 | 6 | 3 | 1 | 7 | 3 | x |
| 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | = |
| 66 | 60 | 63 | 40 | 35 | 36 | 15 | 4 | 21 | 6 |
66 + 60 + 63 + 40 + 35 + 36 + 15 + 4 + 21 + 6 = 346
Calculamos o módulo de 11 do resultado (resto da divisão inteira do resultado por 11):
346 % 11 = 5
Finalmente, subtraímos esse módulo de 11: 11 – 5 = 6
Assim, 6 é o dígito verificador 2 (DV2).
Algoritmo em Portugol para calcular o dígito verificador de um CPF
programa
{
inclua biblioteca Texto --> t
inclua biblioteca Tipos --> ti
cadeia cpf
inteiro cpf_digitos[11]
inteiro digito1, digito2
logico res = falso
funcao inicio()
{
escreva("Digite o CPF: ")
leia(cpf)
para (inteiro i = 0; i < 11; i++) {
cpf_digitos[i] = ti.caracter_para_inteiro(t.obter_caracter(cpf, i))
}
res = ValidaCPF(cpf_digitos)
se (res == verdadeiro) {
escreva("CPF válido!")
}
senao {
escreva("CPF inválido!")
}
}
funcao logico ValidaCPF(inteiro num[]) {
inteiro i, j, soma, resto, dv1, dv2
// Dígito verificador #1
soma = 0
j = 10
para (i = 0; i < 9; i++) {
soma += num[i] * j
j -= 1
}
resto = soma % 11
se (resto < 2) {
dv1 = 0
}
senao {
dv1 = 11 - resto
}
// Dígito verificador #2
soma = 0
j = 11
para (i = 0; i < 10; i++) {
soma += (num[i]) * j
j -= 1
}
resto = soma % 11
se (resto < 2) {
dv2 = 0
}
senao {
dv2 = 11 - resto
}
se ((num[9] == dv1) e (num[10] == dv2)) {
retorne verdadeiro
}
senao {
retorne falso
}
}
}
Funcionamento do código do algoritmo de cálculo do dígito verificador do CPF
- cpf: Variável que armazena o CPF informado pelo usuário para validação, no formato de cadeia de caracteres.
- cpf_digitos[11]: Vetor de 11 caracteres para armazenar os dígitos individuais do CPF.
- digito1 e digito2: Variáveis inteiras para armazenar os dígitos verificadores calculados.
- res: Variável do tipo lógico que armazena o resultado da validação.
- Dentro da função inicio(), o programa solicita ao usuário que digite o CPF e lê o valor digitado, armazenando-o na a variável cpf.
- Em seguida, o programa percorre cada caractere do CPF digitado e os converte para números inteiros, armazenando-os no array cpf_digitos.
- O programa então chama a função ValidaCPF passando o array cpf_digitos como argumento, e armazena o resultado retornado na variável booleana res.
- O programa verifica se res é verdadeiro, ou seja, se a função ValidaCPF retornou verdadeiro. Se sim, imprime a mensagem “CPF válido!”. Caso contrário, imprime a mensagem “CPF inválido!”.
- O programa realiza o cálculo do primeiro dígito verificador utilizando a fórmula de validação do CPF. Ele itera sobre os primeiros 9 dígitos do CPF, multiplicando cada um deles pela sequência decrescente de 10 a 2 e somando o resultado na variável soma.
- O resultado é dividido por 11 e obtém-se o resto da divisão.
- Se o resto for menor que 2, o primeiro dígito verificador é 0. Caso contrário, é calculado realizando-se 11 menos o resto obtido.
- O programa repete o mesmo processo para calcular o segundo dígito verificador, agora considerando os primeiros 10 dígitos do CPF. A multiplicação agora é pela sequência decrescente de 11 a 2.
- O resultado é dividido por 11 e obtém-se novamente o resto da divisão.
- Se o resto for menor que 2, o segundo dígito verificador é 0. Caso contrário, é calculado como 11 menos o resto obtido.
E se preferir, assista a um vídeo da Bóson Treinamentos onde explico como implementar esse algoritmo para testes:





Olá, Fábio!
Seria possível executar este algoritmo no visualg? Ou só é possível executá-lo no portugol studio?
Olá José!
Faz um bom tempo que não trabalho com VisualG, mas se não me falha a memória, ele não possui funções de conversão de tipos e de retorno de caracteres de uma string. Sendo assim, o algoritmo como está não funcionaria se fosse convertido, e provavelmente teria de ter sua lógica modificada para realizar a validação de um CPF.