UNPKG

@dueheads/citi-bank-boleto-sdk

Version:

SDK para registro de boletos na API do Citibank via mTLS.

43 lines (42 loc) 1.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LinhaDigitavelFormatter = void 0; /** * Formata e valida a linha digitável de um boleto bancário. */ class LinhaDigitavelFormatter { /** * Formata uma linha digitável de 47 dígitos no padrão com pontos e espaços. * Ex: '12345678901234567890123456789012345678901234567' se torna * '12345.67890 12345.678901 23456.789012 3 45678901234567' * * @param linhaDigitavel A linha digitável com 47 dígitos, sem formatação. * @returns A linha digitável formatada. * @throws {Error} Se a entrada for inválida (diferente de 47 dígitos numéricos). */ format(linhaDigitavel) { // 1. Validação da entrada if (!linhaDigitavel || !/^[0-9]{47}$/.test(linhaDigitavel)) { throw new Error('Linha digitável inválida. Deve conter exatamente 47 dígitos numéricos.'); } // 2. Divisão da linha em seus 5 campos const campo1 = linhaDigitavel.substring(0, 10); const campo2 = linhaDigitavel.substring(10, 21); const campo3 = linhaDigitavel.substring(21, 32); const campo4 = linhaDigitavel.substring(32, 33); // Dígito verificador do código de barras const campo5 = linhaDigitavel.substring(33, 47); // Fator de vencimento e valor // 3. Formatação dos campos com pontos const campo1Formatado = `${campo1.substring(0, 5)}.${campo1.substring(5)}`; const campo2Formatado = `${campo2.substring(0, 5)}.${campo2.substring(5)}`; const campo3Formatado = `${campo3.substring(0, 5)}.${campo3.substring(5)}`; // 4. Junção dos campos formatados com espaços return [ campo1Formatado, campo2Formatado, campo3Formatado, campo4, campo5 ].join(' '); } } exports.LinhaDigitavelFormatter = LinhaDigitavelFormatter;