UNPKG

pix-toolchain

Version:

Ferramentas para facilitar a utilização do Pix com Typescript/Javascript

72 lines (71 loc) 3.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Validate = void 0; class Validate { /** * Valida o tipo de chave * @param key Chave Pix que deseja validar o tipo * @returns Objeto com a validação do tipo de chave */ validate(key) { return { cpf: this.cpf(key), cnpj: this.cnpj(key), evp: this.evp(key), email: this.email(key), phone: this.phone(key), }; } /** * Retorna um array de KeyType com o tipo que a chave pode ser. * Util para validar quando a chave pode ser um CPF ou um CELULAR * Ex: 12945678969 Pode ser tanto um CPF quanto um celular * @param key Chave Pix que deseja validar * @returns Array com os tipos de chave que ela pode ser */ keyType(key) { const value = this.validate(key); // @ts-ignore return Object.keys(value).filter((type) => value[type]).map((v) => v); } cpf(cpf) { cpf = cpf.replace(/[^\d]+/g, ''); if (cpf.length !== 11 || !!cpf.match(/(\d)\1{10}/)) return false; const values = cpf.split('').map(el => +el); const rest = (count) => (values.slice(0, count - 12).reduce((soma, el, index) => (soma + el * (count - index)), 0) * 10) % 11 % 10; return rest(10) === values[9] && rest(11) === values[10]; } cnpj(cnpj) { cnpj = cnpj.replace(/[^\d]+/g, ''); if (cnpj.length !== 14 || !!cnpj.match(/(\d)\1{13}/)) return false; const values = cnpj.split('').map(el => +el); const rest = (count) => (values.slice(0, count - 14).reverse().reduce((soma, el, index) => (soma + el * (index + 2 <= 9 ? index + 2 : index - 6)), 0) * 10) % 11 % 10; return rest(12) === values[12] && rest(13) === values[13]; } evp(evp) { return /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/.test(evp); } email(email) { return /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(email); } phone(phone) { if (!phone.trim().startsWith('+')) phone = '+55'.concat(phone); phone = '+'.concat(phone.replace(/[^\d]+/g, '')); if (!/^\+[1-9][0-9]\d{1,14}$/.test(phone)) return false; if (!phone.startsWith('+55')) return true; // fonte: https://dados.gov.br/dataset/codigos-nacionais-cn const dddList = [ '11', '12', '13', '14', '15', '16', '17', '18', '19', '21', '22', '24', '27', '28', '31', '32', '33', '34', '35', '37', '38', '41', '42', '43', '44', '45', '46', '47', '48', '49', '51', '53', '54', '55', '61', '62', '63', '64', '65', '66', '67', '68', '69', '71', '73', '74', '75', '77', '79', '81', '82', '83', '84', '85', '86', '87', '88', '89', '91', '92', '93', '94', '95', '96', '97', '98', '99' ]; const ddd = phone.substring(3, 5); return phone.length > 13 && phone[5] === '9' && !!dddList.find((item) => item === ddd); } } exports.Validate = Validate;