UNPKG

doc-br-validator

Version:

Validador e gerador de documentos brasileiros (CPF, CNPJ...)

65 lines (56 loc) 1.65 kB
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; }