Socket
Socket
Sign inDemoInstall

@mrmgomes/boleto-utils

Package Overview
Dependencies
2
Maintainers
1
Versions
6
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.1.0 to 1.2.0

.github/workflows/node.js.yml

14

package.json
{
"name": "@mrmgomes/boleto-utils",
"version": "1.1.0",
"version": "1.2.0",
"description": "Biblioteca com funções úteis para a validação de todos os tipos de boleto",
"main": "./src/boleto-utils.js",
"scripts": {
"test": "mocha"
},
"repository": {

@@ -28,3 +31,10 @@ "type": "git",

},
"homepage": "https://github.com/mrmgomes/boleto-utils#readme"
"homepage": "https://github.com/mrmgomes/boleto-utils#readme",
"devDependencies": {
"chai": "^4.2.0",
"mocha": "^8.0.1"
},
"dependencies": {
"moment-timezone": "^0.5.31"
}
}

7

README.md

@@ -0,1 +1,2 @@

![tests](https://github.com/edniemeyer/boleto-utils/workflows/tests/badge.svg)
# boleto-utils

@@ -40,7 +41,7 @@ Biblioteca com funções úteis para a validação de todos os tipos de boleto

### 3. Exemplos de uso
A princípio, a função `validarBoleto(codigo: string)` é a única que poderia ser utilizada para validar e trazer informações de um código de barras/linha digitável, portanto mostrarei apenas este exemplo. As demais funções estão documentadas acima e são autoexplicativas.
A princípio, a função `validarBoleto(codigo: string, tipoCodigo: string)` é a única que poderia ser utilizada para validar e trazer informações de um código de barras/linha digitável, portanto mostrarei apenas este exemplo. As demais funções estão documentadas acima e são autoexplicativas.
Exemplo #1:
```javascript
validarBoleto('23790448095616862379336011058009740430000124020');
validarBoleto('23790448095616862379336011058009740430000124020', 'LINHA_DIGITAVEL');
```

@@ -62,3 +63,3 @@ Retorno #1:

```javascript
validarBoleto('34196790600001000002220000005566385101214000');
validarBoleto('34196790600001000002220000005566385101214000', 'CODIGO_DE_BARRAS');
```

@@ -65,0 +66,0 @@ Retorno #2:

@@ -14,6 +14,6 @@ /**

exports.identificarTipoCodigo = (codigo) => {
if (typeof codigo !== 'string') throw new TypeError('Insira uma string válida!');
codigo = codigo.replace(/[^0-9]/g, '');
if (typeof codigo !== 'string') throw new TypeError('Insira uma string válida!');
if (codigo.length == 44) {

@@ -45,2 +45,3 @@ return 'CODIGO_DE_BARRAS'

* @return {string} OUTROS
* @return {string} CARTAO_DE_CREDITO
*/

@@ -52,3 +53,5 @@ exports.identificarTipoBoleto = (codigo) => {

if (codigo.substr(0, 1) == '8') {
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') {

@@ -97,3 +100,3 @@ return 'ARRECADACAO_PREFEITURA';

mod: 10,
efetivo: true
efetivo: true
};

@@ -104,3 +107,3 @@ break;

mod: 10,
efetivo: false
efetivo: false
};

@@ -111,3 +114,3 @@ break;

mod: 11,
efetivo: true
efetivo: true
};

@@ -118,3 +121,3 @@ break;

mod: 11,
efetivo: false
efetivo: false
};

@@ -140,2 +143,3 @@ break;

exports.identificarData = (codigo, tipoCodigo) => {
var moment = require('moment-timezone');
codigo = codigo.replace(/[^0-9]/g, '');

@@ -145,11 +149,6 @@ const tipoBoleto = this.identificarTipoBoleto(codigo);

let fatorData = '';
let dataBoleto = new Date();
let dataBoleto = moment.tz("1997-10-07 20:54:59.000Z", "UTC");
dataBoleto.setFullYear(1997);
dataBoleto.setMonth(9);
dataBoleto.setDate(7);
dataBoleto.setHours(23, 54, 59);
if (tipoCodigo === 'CODIGO_DE_BARRAS') {
if (tipoBoleto == 'BANCO') {
if (tipoBoleto == 'BANCO' || tipoBoleto == 'CARTAO_DE_CREDITO') {
fatorData = codigo.substr(5, 4)

@@ -160,3 +159,3 @@ } else {

} else if (tipoCodigo === 'LINHA_DIGITAVEL') {
if (tipoBoleto == 'BANCO') {
if (tipoBoleto == 'BANCO' || tipoBoleto == 'CARTAO_DE_CREDITO') {
fatorData = codigo.substr(33, 4)

@@ -168,6 +167,5 @@ } else {

dataBoleto.setDate(dataBoleto.getDate() + Number(fatorData));
dataBoleto.setTime(dataBoleto.getTime() + dataBoleto.getTimezoneOffset() - (3) * 60 * 60 * 1000);
dataBoleto.add(Number(fatorData), 'days');
return dataBoleto;
return dataBoleto.toDate();
}

@@ -240,3 +238,3 @@

if (tipoCodigo == 'CODIGO_DE_BARRAS') {
if (tipoBoleto == 'BANCO') {
if (tipoBoleto == 'BANCO' || tipoBoleto == 'CARTAO_DE_CREDITO') {
valorBoleto = codigo.substr(9, 10);

@@ -255,3 +253,3 @@ valorFinal = valorBoleto.substr(0, 8) + '.' + valorBoleto.substr(8, 2);

} else if (tipoCodigo == 'LINHA_DIGITAVEL') {
if (tipoBoleto == 'BANCO') {
if (tipoBoleto == 'BANCO' || tipoBoleto == 'CARTAO_DE_CREDITO') {
valorBoleto = codigo.substr(37);

@@ -317,3 +315,3 @@ valorFinal = valorBoleto.substr(0, 8) + '.' + valorBoleto.substr(8, 2);

if (tipoBoleto == 'BANCO') {
if (tipoBoleto == 'BANCO' || tipoBoleto == 'CARTAO_DE_CREDITO') {
const novaLinha = codigo.substr(0, 4) + codigo.substr(19, 25) + codigo.substr(4, 1) + codigo.substr(5, 14);

@@ -389,3 +387,3 @@

if (tipoBoleto == 'BANCO') {
if (tipoBoleto == 'BANCO' || tipoBoleto == 'CARTAO_DE_CREDITO') {
resultado = codigo.substr(0, 4) +

@@ -450,5 +448,4 @@ codigo.substr(32, 1) +

*/
exports.validarCodigoComDV = (codigo) => {
exports.validarCodigoComDV = (codigo, tipoCodigo) => {
codigo = codigo.replace(/[^0-9]/g, '');
let tipoCodigo = this.identificarTipoCodigo(codigo);
let tipoBoleto;

@@ -461,3 +458,3 @@

if (tipoBoleto == 'BANCO') {
if (tipoBoleto == 'BANCO' || tipoBoleto == 'CARTAO_DE_CREDITO') {
const bloco1 = codigo.substr(0, 9) + this.calculaMod10(codigo.substr(0, 9));

@@ -483,6 +480,26 @@ const bloco2 = codigo.substr(10, 10) + this.calculaMod10(codigo.substr(10, 10));

} else if (identificacaoValorRealOuReferencia.mod == 11) {
bloco1 = codigo.substr(0, 11) + this.calculaMod11(codigo.substr(0, 11));
bloco2 = codigo.substr(12, 11) + this.calculaMod11(codigo.substr(12, 11));
bloco3 = codigo.substr(24, 11) + this.calculaMod11(codigo.substr(24, 11));
bloco4 = codigo.substr(36, 11) + this.calculaMod11(codigo.substr(36, 11));
bloco1 = codigo.substr(0, 11);
bloco2 = codigo.substr(12, 11);
bloco3 = codigo.substr(24, 11);
bloco4 = codigo.substr(36, 11);
let dv1 = parseInt(codigo.substr(11, 1));
let dv2 = parseInt(codigo.substr(23, 1));
let dv3 = parseInt(codigo.substr(35, 1));
let dv4 = parseInt(codigo.substr(47, 1));
//console.log(dv1)
//console.log(this.calculaMod11(bloco1))
//console.log(dv2)
//console.log(this.calculaMod11(bloco2))
//console.log(dv3)
//console.log(this.calculaMod11(bloco3))
//console.log(dv4)
//console.log(this.calculaMod11(bloco4))
let valid = (this.calculaMod11(bloco1) == dv1 &&
this.calculaMod11(bloco2) == dv2 &&
this.calculaMod11(bloco3) == dv3 &&
this.calculaMod11(bloco4) == dv4)
return valid;
}

@@ -493,5 +510,5 @@

} else if (tipoCodigo === 'CODIGO_DE_BARRAS') {
tipoBoleto = this.identificarTipoBoleto(codigo, 'CODIGO_DE_BARRAS');
tipoBoleto = this.identificarTipoBoleto(codigo);
if (tipoBoleto == 'BANCO') {
if (tipoBoleto == 'BANCO' || tipoBoleto == 'CARTAO_DE_CREDITO') {
const DV = this.calculaDVCodBarras(codigo, 4, 11);

@@ -507,3 +524,2 @@ resultado = codigo.substr(0, 4) + DV + codigo.substr(5);

const DV = this.calculaDVCodBarras(codigo, 3, identificacaoValorRealOuReferencia.mod);
resultado = resultado.substr(0, 3) + DV + resultado.substr(3);

@@ -630,5 +646,8 @@

exports.validarBoleto = (codigo) => {
let tipoCodigo = this.identificarTipoCodigo(codigo);
let retorno = {};
codigo = codigo.replace(/[^0-9]/g, '');
/**

@@ -652,3 +671,3 @@ * Boletos de cartão de crédito geralmente possuem 46 dígitos. É necessário adicionar mais um zero no final, para formar 47 caracteres

retorno.mensagem = 'Este tipo de boleto deve possuir um código de barras 44 caracteres numéricos. Ou linha digitável de 48 caracteres numéricos.';
} else if (!this.validarCodigoComDV(codigo)) {
} else if (!this.validarCodigoComDV(codigo, tipoCodigo)) {
retorno.sucesso = false;

@@ -661,3 +680,2 @@ retorno.codigoInput = codigo;

retorno.mensagem = 'Boleto válido';
let tipoCodigo = this.identificarTipoCodigo(codigo);

@@ -728,34 +746,31 @@ switch (tipoCodigo) {

*
* @param {string} numero Numeração
* @param {string} x Numeração
*
* -------------
*
* @return {string} soma
* @return {string} digito
*/
exports.calculaMod11 = (numero) => {
numero = numero.replace(/\D/g, '');
exports.calculaMod11 = (x) => {
let sequencia = [4, 3, 2, 9, 8, 7, 6, 5];
let digit = 0;
let j = 0;
let DAC = 0;
let soma = 0;
let peso = 2;
const base = 9;
const contador = numero.length - 1;
for (let i = contador; i >= 0; i--) {
soma = soma + (parseInt(numero.substring(i, i + 1)) * peso);
if (peso < base) {
peso++;
} else {
peso = 2;
}
//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));
}
let digito = 11 - (soma % 11);
if (digito > 9) {
digito = 0;
}
// Se for igual a 0, 10 ou 11, o dígito será 1
if (digito === 0 || digito === 10 || digito === 11) {
digito = 1;
}
DAC = digit % 11;
return digito;
if (DAC == 0 || DAC == 1)
return 0;
if (DAC == 10)
return 1;
return (11 - DAC);
}

@@ -762,0 +777,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc