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.
 
 
Sobre Fábio dos Reis (1195 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


*