doc-br-validator
Version:
Validador e gerador de documentos brasileiros (CPF, CNPJ...)
65 lines (56 loc) • 1.65 kB
text/typescript
export function validarCPF(cpf: string): boolean {
// 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: string): string {
cpf = cpf.replace(/\D/g, '');
return cpf.replace(/(\d{3})(\d{3})(\d{3})(\d{2})/, '$1.$2.$3-$4');
}
export function gerarCPF(): string {
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;
}