UNPKG

cnab400-itau-parser

Version:

Extrai informações código de barras e linha digitável de arquivos de retorno CNAB 400 do Itaú

77 lines (67 loc) 2.23 kB
/** * Calcula o DAC (Dígito de Autenticação e Controle). * * @param {string} number - Número para calcular o DAC. * @returns {number} O dígito de autenticação e controle. */ function calculateDAC(number) { number = String(number); let sum = 0; let weight = 2; for (let i = number.length - 1; i >= 0; i--) { let multiplication = parseInt(number.charAt(i)) * weight; if (multiplication > 9) multiplication -= 9; sum += multiplication; weight = weight === 2 ? 1 : 2; } const remainder = sum % 10; return remainder === 0 ? 0 : 10 - remainder; } /** * Calcula a diferença em dias entre a data fornecida e a data de referência. * * @param {string} startDate - Data no formato DDMMYY. * @returns {number} A diferença em dias. */ function compareInDays(startDate) { const referenceDate = new Date('1997-10-07'); const parsedDate = parseDate(startDate); if (!parsedDate) { throw new Error('Invalid date'); } const timeDiff = parsedDate.getTime() - referenceDate.getTime(); return Math.floor(timeDiff / (1000 * 60 * 60 * 24)); // Diferença em dias } /** * Converte uma string de data no formato DDMMYY para um objeto Date. * * @param {string} dateStr - Data no formato DDMMYY. * @returns {Date} Data como objeto Date. */ function parseDate(dateStr) { const day = parseInt(dateStr.substring(0, 2), 10); const month = parseInt(dateStr.substring(2, 4), 10) - 1; // Meses começam em 0 const year = 2000 + parseInt(dateStr.substring(4, 6), 10); return new Date(year, month, day); } /** * Calcula o DAC do código de barras. * * @param {string} barCode - Código de barras para calcular o DAC. * @returns {string} O DAC do código de barras. */ function calculateBarCodeDAC(barCode) { let sum = 0; for (let i = 0; i < barCode.length; i++) { const digit = parseInt(barCode.charAt(i), 10); sum += digit * (i % 2 === 0 ? 2 : 1); } const mod = sum % 10; return mod === 0 ? '0' : (10 - mod).toString(); } module.exports = { calculateDAC, compareInDays, parseDate, calculateBarCodeDAC };