doc-br-validator
Version:
Validador e gerador de documentos brasileiros (CPF, CNPJ...)
61 lines (60 loc) • 1.69 kB
JavaScript
export function validarCPF(cpf) {
// Remove caracteres não numéricos
cpf = cpf.replace(/\D/g, '');
// Verifica se tem 11 dígitos ou se é uma sequência inválida
if (cpf.length !== 11 || /^(\d)\1{10}$/.test(cpf)) {
return false;
}
// Calcula o primeiro dígito verificador
let soma = 0;
for (let i = 0; i < 9; i++) {
soma += parseInt(cpf.charAt(i)) * (10 - i);
}
let resto = (soma * 10) % 11;
if (resto === 10 || resto === 11)
resto = 0;
if (resto !== parseInt(cpf.charAt(9))) {
return false;
}
// Calcula o segundo dígito verificador
soma = 0;
for (let i = 0; i < 10; i++) {
soma += parseInt(cpf.charAt(i)) * (11 - i);
}
resto = (soma * 10) % 11;
if (resto === 10 || resto === 11)
resto = 0;
if (resto !== parseInt(cpf.charAt(10))) {
return false;
}
return true;
}
export function formatarCPF(cpf) {
cpf = cpf.replace(/\D/g, '');
return cpf.replace(/(\d{3})(\d{3})(\d{3})(\d{2})/, '$1.$2.$3-$4');
}
export function gerarCPF() {
let cpf = '';
for (let i = 0; i < 9; i++) {
cpf += Math.floor(Math.random() * 10);
}
// Calcula primeiro dígito
let soma = 0;
for (let i = 0; i < 9; i++) {
soma += parseInt(cpf.charAt(i)) * (10 - i);
}
let digito1 = (soma * 10) % 11;
if (digito1 >= 10)
digito1 = 0;
cpf += digito1;
// Calcula segundo dígito
soma = 0;
for (let i = 0; i < 10; i++) {
soma += parseInt(cpf.charAt(i)) * (11 - i);
}
let digito2 = (soma * 10) % 11;
if (digito2 >= 10)
digito2 = 0;
cpf += digito2;
return cpf;
}