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

O formato de um CPF (Cadastro de Pessoas Físicas) é composto por 11 dígitos no seguinte padrão: XXX.XXX.XXX-YY, onde os “X” representam os dígitos numéricos e os “Y” representam os dígitos verificadores.
 
O penúltimo dígito é o DV módulo 11 dos nove dígitos anteriores e o último dígito é o DV módulo 11 dos dez dígitos anteriores.
 
No caso do CPF, o DV módulo 11 corresponde ao resto da divisão por 11 do somatório da multiplicação de cada algarismo da base respectivamente por 9, 8, 7, 6, 5, 4, 3 e 2, a partir do dígito mais à esquerda. O resto 10 é considerado como valor 0. 
 
O nono dígito indica a região fiscal do documento – ou seja, o estado emissor. As regiões fiscais onde o CPF é emitido tem os seguintes valores:
 
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

Vejamos como realizar o cálculo dos dois dígitos verificadores de CPF por meio de um exemplo. Suponhamos o CPF de número 667.556.317-36. Note que esse CPF foi emitido em um dos estados: Rio de Janeiro ou Espírito Santo, pois o nono dígito é o 7 (último dígito antes do traço separador). Mas como verificar se ele é válido?
 
Para isso temos de efetuar a validação dos dígitos verificadores – no caso 3 e 6. Vamos ao processo:
 

Passo 1 – Calcular DV1:

Vamos primeiramente calcular o dígito verificador #1.
Precisamos usar os nove primeiros dígitos do CPF para isso:
 
6 6 7 5 5 6 3 1 7
 
Multiplicamos os dígitos pela sequência decremental de 10 a 2
 
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  
 
Efetuamos o somatório dos valores obtidos para cada dígito multiplicado:

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:

Vamos agora calcular o dígito verificador #2. Precisamos usar os nove primeiros dígitos do CPF mais o DV1 calculado no passo anterior para isso:
 
6 6 7 5 5 6 3 1 7 3
 
Multiplicamos os dígitos (incluindo o DV1) pela sequência decremental de 11 a 2:
 
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  
 
Efetuamos o somatório dos valores obtidos para cada dígito multiplicado:

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).

CPF validado.
 
Excelente. Agora que sabemos como realizar essa verificação manualmente, vamos escrever um algoritmo usando lógica de programação e o software Portugol Studio para executar essa tarefa de forma automatizada para nós.
 

Algoritmo em Portugol para calcular o dígito verificador de um CPF     

Neste exemplo, o algoritmo solicita ao usuário que digite os 9 primeiros dígitos do CPF. Em seguida, é chamada a função ValidaCPF para verificar se o CPF é válido ou não, com base no cálculo dos dígitos verificadores. Caso seja válido, é exibida a mensagem “CPF válido!”; caso contrário, é exibida a mensagem “CPF inválido!”.
 
CÓDIGO NO PORTUGOL STUDIO
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

1. Declaração das variáveis:
 
O programa começa com a declaração de variáveis e a inclusão das bibliotecas necessárias. As variáveis são:
  • 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.
Também são usadas as bibliotecas Texto e Tipos para realizar conversão de tipos e extração de caracteres da string informada para o vetor.
 
2. Corpo principal do programa
  1. 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.
  2. Em seguida, o programa percorre cada caractere do CPF digitado e os converte para números inteiros, armazenando-os no array cpf_digitos.
  3. 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.
  4. 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!”.
3. Definição da função ValidarCPF
 
Esta é a função que efetivamente realiza a validação do CPF. Dentro da função ValidaCPF, são declaradas as variáveis necessárias para realizar a validação dos dígitos verificadores: i, j, soma, resto, dv1 e dv2.
 
A função recebe o vetor cpf_digitos na forma de parâmetro num[] e retorna um valor lógico indicando se o CPF é válido ou não.
Ela realiza o cálculo dos dígitos verificadores do CPF seguindo as regras estabelecidas anteriormente:
 
1. Para calcular o primeiro dígito verificador:
  • 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.
2. Calcular o segundo dígito verificador:
  • 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.
Por fim, a função compara os dígitos verificadores calculados com os dígitos verificadores fornecidos no CPF e retorna verdadeiro se forem iguais, ou falso caso contrário.
 
O valor retornado pela função ValidaCPF será utilizado no programa principal para determinar se o CPF é válido ou inválido, e exibir a mensagem correspondente.
 
É isso aí! Com este algoritmo podemos realizar o cálculo dos dígitos verificadores de um número de CPF para fins de validação. Experimente reescrever esse algoritmo em sua linguagem de programação favorita, como C#, Python ou Java, por exemplo.

E se preferir, assista a um vídeo da Bóson Treinamentos onde explico como implementar esse algoritmo para testes:

Sobre Fábio dos Reis (1226 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 30 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Ciência e Tecnologia em geral, adora Viagens e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.

Escreva um comentário

Seu e-mail não será divulgado


*