@dueheads/citi-bank-boleto-sdk
Version:
SDK para registro de boletos na API do Citibank via mTLS.
43 lines (42 loc) • 1.93 kB
JavaScript
;
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;