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
}
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.
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:
10 Comentários