Função JavaScript para validar CPF

O código a seguir foi baseado no script da Receita Federal. A função foi escrita em JavaScript para validar um CPF, sinta-se à vontade para copiar, modificar ou utilizar como quiser:

function validaCPF(cpf) {
  var Soma = 0
  var Resto

  var strCPF = String(cpf).replace(/[^\d]/g, '')
  
  if (strCPF.length !== 11)
     return false
  
  if ([
    '00000000000',
    '11111111111',
    '22222222222',
    '33333333333',
    '44444444444',
    '55555555555',
    '66666666666',
    '77777777777',
    '88888888888',
    '99999999999',
    ].indexOf(strCPF) !== -1)
    return false

  for (i=1; i<=9; i++)
    Soma = Soma + parseInt(strCPF.substring(i-1, i)) * (11 - i);

  Resto = (Soma * 10) % 11

  if ((Resto == 10) || (Resto == 11)) 
    Resto = 0

  if (Resto != parseInt(strCPF.substring(9, 10)) )
    return false

  Soma = 0

  for (i = 1; i <= 10; i++)
    Soma = Soma + parseInt(strCPF.substring(i-1, i)) * (12 - i)

  Resto = (Soma * 10) % 11

  if ((Resto == 10) || (Resto == 11)) 
    Resto = 0

  if (Resto != parseInt(strCPF.substring(10, 11) ) )
    return false

  return true
}
view raw validaCPF.js hosted with ❤ by GitHub

Será que isso já resolveu o seu problema? Se sim, lembre-se de deixar o seu comentário no final do artigo! Abaixo, vamos detalhar passo a passo o funcionamento da função validaCPF()

Testando a função de validar CPF:

Abaixo podemos testar nossa função de validação. Você pode informar o número do CPF com ou sem formação, pois a própria função no momento de validar remove os caracteres extras. Tente alguns números de CPF e veja o resultado:

Achou alguma falha? Então, por gentileza, deixe o seu comentário nos informando o que ocorreu ao final deste artigo!

Explicando como a função funciona:

A seguir, veremos passo a passo como a função JavaScript foi escrita para validar o CPF. Nas primeiras linhas são definidas as variáveis que serão utilizadas ao longo da função:

var Soma = 0
var Resto

Primeiramente, precisamos limpar o parâmetro cpf removendo todo e qualquer caractere que não seja número. Vamos utilizar a função replace com uma expressão regular para isso e assim armazenar o valor na variável strCPF:

var strCPF = String(cpf).replace(/[^\d]/g, '')

Feito isso, precisamos agora verificar se o parâmetro srtCPF está correto. Ou seja, ele deve ter apenas 11 dígitos numéricos. Caso não seja, a função deve retornar false:

if (strCPF.length !== 11)
  return false

Em seguida, verificamos se o parâmetro srtCPF é não repete os números, pois mesmo com toda a validação numérica este valor ainda seria possível. Então, precisamos eliminar esta possibilidade:

if ([
  '00000000000',
  '11111111111',
  '22222222222',
  '33333333333',
  '44444444444',
  '55555555555',
  '66666666666',
  '77777777777',
  '88888888888',
  '99999999999',
].indexOf(strCPF) !== -1)
  return false

Agora, realizamos uma soma com a multiplicação pelo posicionamento do caractere dos nove primeiros dígitos do CPF para calcular a variável Resto:

for (i=1; i<=9; i++)
  Soma = Soma + parseInt(strCPF.substring(i-1, i)) * (11 - i)

  Resto = (Soma * 10) % 11

Caso o valor de Resto seja 10 ou 11, então a variável deve ser zerada:

if ((Resto == 10) || (Resto == 11))
  Resto = 0

O valor da variável Resto deve ser diferente do valor do décimo caractere do CPF, senão retornará false na validação:

if (Resto != parseInt(strCPF.substring(9, 10)) )
  return false

Então, redefinimos a variável Some para realizamos uma nova validação com a variável Resto:

Soma = 0

for (i = 1; i <= 10; i++)
  Soma = Soma + parseInt(strCPF.substring(i-1, i)) * (12 - i)

Resto = (Soma * 10) % 11

Novamente, o Resto não pode ser nem 10, nem 11. Caso contrário, zeramos a variável de novo:

if ((Resto == 10) || (Resto == 11))
  Resto = 0

Dessa vez, a variável Resto não pode ser igual o décimo primeiro dígito do CPF. Caso contrário a validação retornará false:

if (Resto != parseInt(strCPF.substring(10, 11) ) )
  return false

Por fim, se o strCPF passou por todas as condições e não retornou false só pode ser válida. Dessa forma, devamos retornar o valor true e finalmente validar o CPF como correto:

return true

Caso você tenha interesse numa descrição matemática mais detalhada dos cálculos numéricos, você pode acessar o site da Só Matemática.


Tags:

  • Validação
  • CPF
  • JavaScript

Compartilhar:

    O que achou do artigo?

    Escreva um comentário, deixe-me saber o que achou do artigo. Se tens uma dúvida basta perguntar:

    Resposta ao comentário:
    Loading...