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
JavaScript
/**
* 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
};