Created
December 28, 2022 14:01
-
-
Save iuriguilherme/776161121c8fd4adc647a71cfde13222 to your computer and use it in GitHub Desktop.
Verificador de CPF válido em Javascript
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Validador e gerador de CPF em javascript | |
* Domínio Público 2016 | |
* Faça péssimo uso | |
*/ | |
// http://run.plnkr.co/plunks/93FPpacuIcXqqKMecLdk/ | |
function isNumeric(n) { | |
return !isNaN(parseFloat(n)) && isFinite(n); | |
} | |
// Elimina tudo o que não for número | |
function validaNumero(numero) { | |
numero = String(numero); | |
numero = numero.replace(/\D/g,''); | |
numero = numero.replace(/\d{2,}/g,''); | |
if (isNumeric(numero))return parseInt(numero); | |
return ''; | |
} | |
// Acrescenta pontos e hífens no número de CPF | |
function formataCPF(cpf) { | |
while (cpf.length < 11) cpf.push('_'); | |
return ( | |
cpf[0].toString() | |
+ cpf[1].toString() | |
+ cpf[2].toString() | |
+ '.' | |
+ cpf[3].toString() | |
+ cpf[4].toString() | |
+ cpf[5].toString() | |
+ '.' | |
+ cpf[6].toString() | |
+ cpf[7].toString() | |
+ cpf[8].toString() | |
+ '-' | |
+ cpf[9].toString() | |
+ cpf[10].toString() | |
); | |
} | |
// Validação do módulo do dígito verificador do CPF | |
function calculaModulo(limite, cpf) { | |
var incremento = 0; | |
var soma = 0; | |
for (var i = (limite-1); i > 1; i--) { | |
soma = soma + (i * cpf[incremento]); | |
incremento++; | |
} | |
var modulo = (soma % limite); | |
if (modulo >= 2 ) return (limite - modulo); | |
return 0; | |
} | |
/* | |
* Verifica se todos dígitos são iguais. | |
* Os seguintes números de CPF são inválidos por definição: | |
* 000.000.000-00 | |
* 111.111.111-11 | |
* 222.222.222-22 | |
* 333.333.333-33 | |
* 444.444.444-44 | |
* 555.555.555-55 | |
* 666.666.666-66 | |
* 777.777.777-77 | |
* 888.888.888-88 | |
* 999.999.999-99 | |
*/ | |
function validaCPF(cpf) { | |
for (var i = 0; i < cpf.length; i++) { | |
if (cpf[0].toString() != cpf[i].toString()) return false; | |
} | |
return true; | |
} | |
//Gera número aleatório entre 0 e 9. | |
function digitoAleatorio() { | |
return Math.floor(Math.random() * 10); | |
} | |
// Variáveis | |
var limite = 11; | |
var numero = 0; | |
var digitoPrimeiro = 0; | |
var digitoSegundo = 0; | |
var resposta = ''; | |
var cpf = new Array(); | |
// Receber nove números | |
for (var i = 0; i < 9; i++) { | |
do numero = validaNumero( | |
prompt( | |
formataCPF(cpf.slice(0)) | |
+ "\nDigite um número natural de 0 a 9:", digitoAleatorio()) | |
); | |
while (!isNumeric(numero)); | |
cpf[i] = numero; | |
} | |
// O primeiro dígito verificador deve ser calculado antes, porque o cálculo do segundo depende do primeiro | |
digitoPrimeiro = calculaModulo(limite, cpf.slice(0)); | |
cpf.push(digitoPrimeiro); | |
digitoSegundo = calculaModulo(limite, cpf.slice(0)); | |
cpf.push(digitoSegundo); | |
resposta = "O CPF gerado a partir dos nove números fornecidos é: " + formataCPF(cpf.slice(0)) | |
// Verifica validade | |
if (validaCPF(cpf.slice(0)))resposta = resposta + "\nNo entanto, este número de CPF é inválido."; | |
resposta = resposta + "\nConsulte a existência do CPF em https://www.receita.fazenda.gov.br/Aplicacoes/SSL/ATCTA/CPF/ConsultaPublica.asp"; | |
// Imprime CPF | |
alert(resposta); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment