Skip to content

Commit

Permalink
fix: calculo mod11 para boleto nao bancario
Browse files Browse the repository at this point in the history
  • Loading branch information
edniemeyer committed Apr 16, 2020
1 parent 402caa0 commit b1a83bf
Showing 1 changed file with 39 additions and 34 deletions.
73 changes: 39 additions & 34 deletions src/boleto-utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,13 +41,14 @@ exports.identificarTipoCodigo = (codigo) => {
* @return {string} CONVENIO_ENERGIA_ELETRICA_E_GAS
* @return {string} CONVENIO_TELECOMUNICACOES
* @return {string} OUTROS
* @return {string} CARTAO_DE_CREDITO
*/
exports.identificarTipoBoleto = (codigo) => {
codigo = codigo.replace(/[^0-9]/g, '');

if (typeof codigo !== 'string') throw new TypeError('Insira uma string válida!');

if (codigo.substr(-14) == '00000000000000') {
if (codigo.substr(-14) == '00000000000000' || codigo.substr(5,14) == '00000000000000') {
return 'CARTAO_DE_CREDITO';
} else if (codigo.substr(0, 1) == '8') {
if (codigo.substr(1, 1) == '1') {
Expand Down Expand Up @@ -419,7 +420,11 @@ exports.calculaDVCodBarras = (codigo, posicaoCodigo, mod) => {
if (mod === 10) {
return this.calculaMod10(codigo);
} else if (mod === 11) {
return this.calculaMod11(codigo);
if (posicaoCodigo === 4) {// tipoBoleto BANCO ou CARTAO_DE_CREDITO
return this.calculaMod11(codigo);
} else if(posicaoCodigo === 3) {// tipoBoleto diferente de BANCO ou CARTAO_DE_CREDITO
return this.calculaMod11Concessionaria(codigo);
}
}
}

Expand Down Expand Up @@ -485,7 +490,7 @@ exports.validarCodigoComDV = (codigo, tipoCodigo) => {
resultado = bloco1 + bloco2 + bloco3 + bloco4;
}
} else if (tipoCodigo === 'CODIGO_DE_BARRAS') {
tipoBoleto = this.identificarTipoBoleto(codigo, 'CODIGO_DE_BARRAS');
tipoBoleto = this.identificarTipoBoleto(codigo);

if (tipoBoleto == 'BANCO' || tipoBoleto == 'CARTAO_DE_CREDITO') {
const DV = this.calculaDVCodBarras(codigo, 4, 11);
Expand Down Expand Up @@ -776,41 +781,41 @@ exports.calculaMod11 = (x) => {
return DAC;
}

// /**
// * Calcula o dígito verificador de uma numeração a partir do módulo 11
// *
// * -------------
// *
// * @param {string} x Numeração
// *
// * -------------
// *
// * @return {string} digito
// */
// exports.calculaMod11Concessionaria = (x) => {
// let sequencia = [4, 3, 2, 9, 8, 7, 6, 5];
// let digit = 0;
// let j = 0;
// let DAC = 0;

// //FEBRABAN https://cmsportal.febraban.org.br/Arquivos/documentos/PDF/Layout%20-%20C%C3%B3digo%20de%20Barras%20-%20Vers%C3%A3o%205%20-%2001_08_2016.pdf
// for (var i = 0; i < x.length; i++) {
// let mult = sequencia[j];
// j++;
// j %= sequencia.length;
// digit += mult * parseInt(x.charAt(i));
// }
/**
* Calcula o dígito verificador de uma numeração a partir do módulo 11
*
* -------------
*
* @param {string} x Numeração
*
* -------------
*
* @return {string} digito
*/
exports.calculaMod11Concessionaria = (x) => {
let sequencia = [4, 3, 2, 9, 8, 7, 6, 5];
let digit = 0;
let j = 0;
let DAC = 0;

//FEBRABAN https://cmsportal.febraban.org.br/Arquivos/documentos/PDF/Layout%20-%20C%C3%B3digo%20de%20Barras%20-%20Vers%C3%A3o%205%20-%2001_08_2016.pdf
for (var i = 0; i < x.length; i++) {
let mult = sequencia[j];
j++;
j %= sequencia.length;
digit += mult * parseInt(x.charAt(i));
}

// DAC = digit % 11;
DAC = digit % 11;

// if (DAC == 1)
// DAC = 0;
// if (DAC == 10)
// DAC = 1;
if (DAC == 1)
DAC = 0;
if (DAC == 10)
DAC = 1;

// return DAC;
return DAC;

// }
}

/**
* Função auxiliar para remover os zeros à esquerda dos valores detectados no código inserido
Expand Down

0 comments on commit b1a83bf

Please sign in to comment.