@mrmgomes/boleto-utils
Advanced tools
Comparing version 1.0.1 to 1.0.2
{ | ||
"name": "@mrmgomes/boleto-utils", | ||
"version": "1.0.1", | ||
"version": "1.0.2", | ||
"description": "Biblioteca com funções úteis para a validação de todos os tipos de boleto", | ||
@@ -5,0 +5,0 @@ "main": "./src/boleto-utils.js", |
@@ -26,2 +26,3 @@ # boleto-utils | ||
`identificarData(codigo: string, tipoCodigo: string)` | Verifica a numeração, o tipo de código inserido e o tipo de boleto e retorna a data de vencimento. Requer numeração completa (com ou sem formatação) e tipo de código que está sendo inserido (CODIGO_DE_BARRAS ou LINHA_DIGITAVEL). | ||
`identificarValorCodBarrasArrecadacao(codigo: string, tipoCodigo: string)` | Verifica a numeração e o tipo de código inserido e retorna o valor do CÓDIGO DE BARRAS do tipo Arrecadação. Requer numeração completa (com ou sem formatação) e tipo de código que está sendo inserido (CODIGO_DE_BARRAS ou LINHA_DIGITAVEL). | ||
`identificarValor(codigo: string, tipoCodigo: string)` | Verifica a numeração, o tipo de código inserido e o tipo de boleto e retorna o valor do título. Requer numeração completa (com ou sem formatação) e tipo de código que está sendo inserido (CODIGO_DE_BARRAS ou LINHA_DIGITAVEL). | ||
@@ -32,2 +33,3 @@ `digitosVerificadores(codigo: string, mod: int)` | Verifica a numeração e o módulo a ser utilizado (Mod 10 ou Mod 11) e retorna o DV (Dígito Verificador). Requer numeração completa (com ou sem formatação) e caracteres numéricos que representam o módulo a ser usado (valores aceitos: 10 ou 11). | ||
`calculaDVCodBarras(codigo: string, posicaoCodigo: int, mod: int)` | Verifica a numeração do código de barras, extrai o DV (dígito verificador) presente na posição indicada, realiza o cálculo do dígito utilizando o módulo indicado e retorna o dígito verificador. Serve para validar o código de barras. Requer numeração completa (com ou sem formatação), caracteres numéricos que representam a posição do dígito verificador no código de barras e caracteres numéricos que representam o módulo a ser usado (valores aceitos: 10 ou 11). | ||
`geraCodBarras(codigo: string)` | Transforma a linha digitável em código de barras inserindo o DV. | ||
`calculaMod10(numero: string)` | Realiza o cálculo Módulo 10 do número inserido. | ||
@@ -34,0 +36,0 @@ `calculaMod11(numero: string)` | Realiza o cálculo Módulo 11 do número inserido. |
@@ -0,1 +1,14 @@ | ||
/** | ||
* Identifica o tipo de código inserido (se baseando na quantidade de dígitos). | ||
* | ||
* ------------ | ||
* | ||
* @param {string} codigo Numeração do boleto | ||
* | ||
* ------------ | ||
* | ||
* @return {string} CODIGO_DE_BARRAS | ||
* @return {string} LINHA_DIGITAVEL | ||
*/ | ||
exports.identificarTipoCodigo = (codigo) => { | ||
@@ -15,2 +28,20 @@ codigo = codigo.replace(/[^0-9]/g, ''); | ||
/** | ||
* Identifica o tipo de boleto inserido a partir da validação de seus dois dígitos iniciais. | ||
* | ||
* ------------- | ||
* | ||
* @param {string} codigo Numeração do boleto | ||
* | ||
* ------------- | ||
* | ||
* @return {string} BANCO | ||
* @return {string} ARRECADACAO_PREFEITURA | ||
* @return {string} ARRECADACAO_ORGAOS_GOVERNAMENTAIS | ||
* @return {string} ARRECADACAO_TAXAS_DE_TRANSITO | ||
* @return {string} CONVENIO_SANEAMENTO | ||
* @return {string} CONVENIO_ENERGIA_ELETRICA_E_GAS | ||
* @return {string} CONVENIO_TELECOMUNICACOES | ||
* @return {string} OUTROS | ||
*/ | ||
exports.identificarTipoBoleto = (codigo) => { | ||
@@ -42,2 +73,14 @@ codigo = codigo.replace(/[^0-9]/g, ''); | ||
/** | ||
* Identifica o o código de referência do boleto para determinar qual módulo | ||
* será utilizado para calcular os dígitos verificadores | ||
* | ||
* ------------- | ||
* | ||
* @param {string} codigo Numeração do boleto | ||
* | ||
* ------------- | ||
* | ||
* @return {json} {mod, efetivo} | ||
*/ | ||
exports.identificarReferencia = (codigo) => { | ||
@@ -80,2 +123,14 @@ codigo = codigo.replace(/[^0-9]/g, ''); | ||
/** | ||
* Identifica o fator da data de vencimento do boleto | ||
* | ||
* ------------- | ||
* | ||
* @param {string} codigo Numeração do boleto | ||
* @param {string} tipoCodigo tipo de código inserido (CODIGO_DE_BARRAS / LINHA_DIGITAVEL) | ||
* | ||
* ------------- | ||
* | ||
* @return {Date} dataBoleto | ||
*/ | ||
exports.identificarData = (codigo, tipoCodigo) => { | ||
@@ -88,17 +143,12 @@ codigo = codigo.replace(/[^0-9]/g, ''); | ||
dataBoleto.setFullYear(1997); | ||
dataBoleto.setMonth(9); | ||
dataBoleto.setDate(7); | ||
dataBoleto.setHours(23, 54, 59); | ||
if (tipoCodigo === 'CODIGO_DE_BARRAS') { | ||
if (tipoBoleto == 'BANCO') { | ||
fatorData = codigo.substr(5, 4) | ||
dataBoleto.setFullYear(1997); | ||
dataBoleto.setMonth(9); | ||
dataBoleto.setDate(7); | ||
dataBoleto.setHours(23, 54, 59); | ||
dataBoleto.setDate(dataBoleto.getDate() + Number(fatorData)); | ||
dataBoleto.setTime(dataBoleto.getTime() + dataBoleto.getTimezoneOffset() - (3) * 60 * 60 * 1000); | ||
} else { | ||
dataBoleto.setFullYear(parseInt(codigo.substr(19, 4))); | ||
dataBoleto.setMonth(parseInt(codigo.substr(23, 2) - 1)); | ||
dataBoleto.setDate(parseInt(codigo.substr(25, 2))); | ||
dataBoleto.setHours(23, 54, 59); | ||
dataBoleto.setTime(dataBoleto.getTime() + dataBoleto.getTimezoneOffset() - (3) * 60 * 60 * 1000); | ||
fatorData = '0'; | ||
} | ||
@@ -108,24 +158,72 @@ } else if (tipoCodigo === 'LINHA_DIGITAVEL') { | ||
fatorData = codigo.substr(33, 4) | ||
dataBoleto.setFullYear(1997); | ||
dataBoleto.setMonth(9); | ||
dataBoleto.setDate(7); | ||
dataBoleto.setHours(23, 54, 59); | ||
dataBoleto.setDate(dataBoleto.getDate() + Number(fatorData)); | ||
dataBoleto.setTime(dataBoleto.getTime() + dataBoleto.getTimezoneOffset() - (3) * 60 * 60 * 1000); | ||
} else { | ||
dataBoleto.setFullYear(parseInt(codigo.substr(20, 3) + codigo.substr(24, 1))); | ||
dataBoleto.setMonth(parseInt(codigo.substr(25, 2) - 1)); | ||
dataBoleto.setDate(parseInt(codigo.substr(27, 2))); | ||
dataBoleto.setHours(23, 54, 59); | ||
dataBoleto.setTime(dataBoleto.getTime() + dataBoleto.getTimezoneOffset() - (3) * 60 * 60 * 1000); | ||
fatorData = '0'; | ||
} | ||
} | ||
dataBoleto.setDate(dataBoleto.getDate() + Number(fatorData)); | ||
dataBoleto.setTime(dataBoleto.getTime() + dataBoleto.getTimezoneOffset() - (3) * 60 * 60 * 1000); | ||
return dataBoleto; | ||
} | ||
exports.identificarValor = (codigo, tipoCodigo) => { | ||
/** | ||
* Identifica o valor no CÓDIGO DE BARRAS do boleto do tipo 'Arrecadação' | ||
* | ||
* ------------- | ||
* | ||
* @param {string} codigo Numeração do boleto | ||
* @param {string} tipoCodigo tipo de código inserido (CODIGO_DE_BARRAS / LINHA_DIGITAVEL) | ||
* | ||
* ------------- | ||
* | ||
* @return {string} valorFinal | ||
*/ | ||
exports.identificarValorCodBarrasArrecadacao = (codigo, tipoCodigo) => { | ||
codigo = codigo.replace(/[^0-9]/g, ''); | ||
const isValorEfetivo = this.identificarReferencia(codigo).efetivo; | ||
let valorBoleto = ''; | ||
let valorFinal; | ||
if (isValorEfetivo) { | ||
if (tipoCodigo == 'LINHA_DIGITAVEL') { | ||
valorBoleto = codigo.substr(4, 14); | ||
valorBoleto = codigo.split(''); | ||
valorBoleto.splice(11, 1); | ||
valorBoleto = valorBoleto.join(''); | ||
valorBoleto = valorBoleto.substr(4, 11); | ||
} else if (tipoCodigo == 'CODIGO_DE_BARRAS') { | ||
valorBoleto = codigo.substr(4, 11); | ||
} | ||
valorFinal = valorBoleto.substr(0, 9) + '.' + valorBoleto.substr(9, 2); | ||
let char = valorFinal.substr(1, 1); | ||
while (char === '0') { | ||
valorFinal = substringReplace(valorFinal, '', 0, 1); | ||
char = valorFinal.substr(1, 1); | ||
} | ||
} else { | ||
valorFinal = 0; | ||
} | ||
return valorFinal; | ||
} | ||
/** | ||
* Identifica o valor no boleto inserido | ||
* | ||
* ------------- | ||
* | ||
* @param {string} codigo Numeração do boleto | ||
* @param {string} tipoCodigo tipo de código inserido (CODIGO_DE_BARRAS / LINHA_DIGITAVEL) | ||
* | ||
* ------------- | ||
* | ||
* @return {float} valorFinal | ||
*/ | ||
exports.identificarValor = (codigo, tipoCodigo) => { | ||
const tipoBoleto = this.identificarTipoBoleto(codigo); | ||
@@ -136,33 +234,45 @@ | ||
switch (tipoCodigo) { | ||
case 'CODIGO_DE_BARRAS': | ||
if (tipoBoleto == 'BANCO') { | ||
valorBoleto = codigo.substr(9, 10); | ||
} else { | ||
valorBoleto = codigo.substr(4, 14); | ||
if (tipoCodigo == 'CODIGO_DE_BARRAS') { | ||
if (tipoBoleto == 'BANCO') { | ||
valorBoleto = codigo.substr(9, 10); | ||
valorFinal = valorBoleto.substr(0, 8) + '.' + valorBoleto.substr(8, 2); | ||
let char = valorFinal.substr(1, 1); | ||
while (char === '0') { | ||
valorFinal = substringReplace(valorFinal, '', 0, 1); | ||
char = valorFinal.substr(1, 1); | ||
} | ||
break; | ||
case 'LINHA_DIGITAVEL': | ||
if (tipoBoleto == 'BANCO') { | ||
valorBoleto = codigo.substr(37); | ||
} else { | ||
valorBoleto = codigo.substr(4, 7) + codigo.substr(12, 4); | ||
} else { | ||
valorFinal = this.identificarValorCodBarrasArrecadacao(codigo, 'CODIGO_DE_BARRAS'); | ||
} | ||
} else if (tipoCodigo == 'LINHA_DIGITAVEL') { | ||
if (tipoBoleto == 'BANCO') { | ||
valorBoleto = codigo.substr(37); | ||
valorFinal = valorBoleto.substr(0, 8) + '.' + valorBoleto.substr(8, 2); | ||
let char = valorFinal.substr(1, 1); | ||
while (char === '0') { | ||
valorFinal = substringReplace(valorFinal, '', 0, 1); | ||
char = valorFinal.substr(1, 1); | ||
} | ||
break; | ||
default: | ||
valorBoleto = 'Valor do boleto não informado'; | ||
break; | ||
} else { | ||
valorFinal = this.identificarValorCodBarrasArrecadacao(codigo, 'LINHA_DIGITAVEL'); | ||
} | ||
} | ||
valorFinal = valorBoleto.substr(0, 8) + '.' + valorBoleto.substr(8, 2); // TODO: !!!!! | ||
let char = valorFinal.substr(1, 1); | ||
while (char === '0') { | ||
valorFinal = substringReplace(valorFinal, '', 0, 1); | ||
char = valorFinal.substr(1, 1); | ||
} | ||
const valorFloat = parseFloat(valorFinal); | ||
return valorFloat; | ||
return parseFloat(valorFinal); | ||
} | ||
/** | ||
* Define qual módulo deverá ser utilizado para calcular os dígitos verificadores | ||
* | ||
* ------------- | ||
* | ||
* @param {string} codigo Numeração do boleto | ||
* @param {int} mod Modulo 10 ou Modulo 11 | ||
* | ||
* ------------- | ||
* | ||
* @return {string} digitoVerificador | ||
*/ | ||
exports.digitosVerificadores = (codigo, mod) => { | ||
@@ -182,2 +292,14 @@ codigo = codigo.replace(/[^0-9]/g, ''); | ||
/** | ||
* Converte a numeração do código de barras em linha digitável | ||
* | ||
* ------------- | ||
* | ||
* @param {string} codigo Numeração do boleto | ||
* @param {boolean} formatada Gerar numeração convertida com formatação (formatado = true / somente números = false) | ||
* | ||
* ------------- | ||
* | ||
* @return {string} resultado | ||
*/ | ||
exports.codBarras2LinhaDigitavel = (codigo, formatada) => { | ||
@@ -226,11 +348,19 @@ codigo = codigo.replace(/[^0-9]/g, ''); | ||
if (identificacaoValorRealOuReferencia.mod == 10) { | ||
bloco1 = codigo.substr(0, 11) + this.calculaMod10(codigo.substr(0, 3) + codigo.substr(5, 7)); | ||
bloco1 = codigo.substr(0, 11) + this.calculaMod10(codigo.substr(0, 11)); | ||
bloco2 = codigo.substr(11, 11) + this.calculaMod10(codigo.substr(11, 11)); | ||
bloco3 = codigo.substr(22, 11) + this.calculaMod10(codigo.substr(22, 11)); | ||
bloco4 = codigo.substr(33, 11) + this.calculaMod10(codigo.substr(33, 11)); | ||
console.log('bloco1 MOD 10:', bloco1); | ||
console.log('bloco2 MOD 10:', bloco2); | ||
console.log('bloco3 MOD 10:', bloco3); | ||
console.log('bloco4 MOD 10:', bloco4); | ||
} else if (identificacaoValorRealOuReferencia.mod == 11) { | ||
bloco1 = codigo.substr(0, 11) + this.calculaMod11(codigo.substr(0, 3) + codigo.substr(5, 7)); | ||
bloco1 = codigo.substr(0, 11) + this.calculaMod11(codigo.substr(0, 11)); | ||
bloco2 = codigo.substr(11, 11) + this.calculaMod11(codigo.substr(11, 11)); | ||
bloco3 = codigo.substr(22, 11) + this.calculaMod11(codigo.substr(22, 11)); | ||
bloco4 = codigo.substr(33, 11) + this.calculaMod11(codigo.substr(33, 11)); | ||
console.log('bloco1 MOD 11:', bloco1); | ||
console.log('bloco2 MOD 11:', bloco2); | ||
console.log('bloco3 MOD 11:', bloco3); | ||
console.log('bloco4 MOD 11:', bloco4); | ||
} | ||
@@ -244,15 +374,55 @@ | ||
exports.linhaDigitavel2CodBarras = (codigo, formatada) => { | ||
/** | ||
* Converte a numeração da linha digitável em código de barras | ||
* | ||
* ------------- | ||
* | ||
* @param {string} codigo Numeração do boleto | ||
* | ||
* ------------- | ||
* | ||
* @return {string} resultado | ||
*/ | ||
exports.linhaDigitavel2CodBarras = (codigo) => { | ||
codigo = codigo.replace(/[^0-9]/g, ''); | ||
let resultado = codigo.substr(0, 4) + | ||
codigo.substr(32, 1) + | ||
codigo.substr(33, 14) + | ||
codigo.substr(4, 5) + | ||
codigo.substr(10, 10) + | ||
codigo.substr(21, 10); | ||
const tipoBoleto = this.identificarTipoBoleto(codigo); | ||
let resultado = ''; | ||
if (tipoBoleto == 'BANCO') { | ||
resultado = codigo.substr(0, 4) + | ||
codigo.substr(32, 1) + | ||
codigo.substr(33, 14) + | ||
codigo.substr(4, 5) + | ||
codigo.substr(10, 10) + | ||
codigo.substr(21, 10); | ||
} else { | ||
codigo = codigo.split(''); | ||
codigo.splice(11, 1); | ||
codigo.splice(22, 1); | ||
codigo.splice(33, 1); | ||
codigo.splice(44, 1); | ||
codigo = codigo.join(''); | ||
resultado = codigo; | ||
} | ||
return resultado; | ||
} | ||
/** | ||
* Calcular o dígito verificador de toda a numeração do código de barras | ||
* | ||
* ------------- | ||
* | ||
* @param {string} codigo Numeração do boleto | ||
* @param {int} posicaoCodigo Posição onde deve se encontrar o dígito verificador | ||
* @param {int} mod Módulo 10 ou Módulo 11 | ||
* | ||
* ------------- | ||
* | ||
* @return {string} numero | ||
*/ | ||
exports.calculaDVCodBarras = (codigo, posicaoCodigo, mod) => { | ||
@@ -272,31 +442,30 @@ codigo = codigo.replace(/[^0-9]/g, ''); | ||
// exports.calculaDVLinhaDigitavel = (codigo) => { | ||
// codigo = codigo.replace(/[^0-9]/g, ''); | ||
/** | ||
* Gerar código de barras já realizando o cálculo do dígito verificador | ||
* | ||
* ------------- | ||
* | ||
* @param {string} novoCodigo Numeração do boleto | ||
* | ||
* ------------- | ||
* | ||
* @return {string} numero | ||
*/ | ||
exports.geraCodBarras = (codigo) => { | ||
codigo = codigo.replace(/[^0-9]/g, ''); | ||
// codigo = codigo.split(''); | ||
// codigo.splice(4, 1); | ||
// codigo = codigo.join(''); | ||
// // let novoCodigo = this.linhaDigitavel2CodBarras(codigo, false); | ||
// // novoCodigo = novoCodigo.split(''); | ||
// // novoCodigo.splice(4, 1); | ||
// // novoCodigo = novoCodigo.join(''); | ||
const tipoBoleto = this.identificarTipoBoleto(codigo); | ||
// // let dv = this.calculaMod11(novoCodigo); | ||
// // novoCodigo = novoCodigo.substr(0, 4) + dv + novoCodigo.substr(4); | ||
// // return novoCodigo; | ||
// return this.calculaMod11(codigo); | ||
// } | ||
let novoCodigo; | ||
// exports.montarCodBarrasComDV = (codigo, posicaoCodigo, mod) => { | ||
// codigo = codigo.replace(/[^0-9]/g, ''); | ||
novoCodigo = this.linhaDigitavel2CodBarras(codigo); | ||
novoCodigo = novoCodigo.split(''); | ||
novoCodigo.splice(4, 1); | ||
novoCodigo = novoCodigo.join(''); | ||
let dv = this.calculaMod11(novoCodigo); | ||
novoCodigo = novoCodigo.substr(0, 4) + dv + novoCodigo.substr(4); | ||
// codigo = codigo.split(''); | ||
// codigo.splice(posicaoCodigo, 1); | ||
// codigo = codigo.join(''); | ||
return novoCodigo; | ||
} | ||
// const dv = this.calculaDVCodBarras(codigo, posicaoCodigo, mod); | ||
// return novoCodigo.substr(0, 4) + dv + novoCodigo.substr(4); | ||
// } | ||
/** | ||
@@ -390,14 +559,30 @@ * ## __`BOLETO COBRANÇA`__ | ||
/** | ||
* Boletos de cartão de crédito geralmente possuem 46 dígitos. É necessário adicionar mais um zero no final, para formar 47 caracteres | ||
* Alguns boletos de cartão de crédito do Itaú possuem 36 dígitos. É necessário acrescentar 11 zeros no final. | ||
*/ | ||
if (codigo.length == 36 && codigo.length == 46) { | ||
codigo = codigo + '0'; | ||
} | ||
if (codigo.length != 44 && codigo.length != 46 && codigo.length != 47 && codigo.length != 48) { | ||
retorno.sucesso = false; | ||
retorno.mensagem = 'Por favor insira uma numeração válida. Códigos de barras devem ter 44 caracteres numéricos. Linhas digitáveis podem possuir 46, 47 ou 48 caracteres numéricos. Qualquer caractere não numérico será desconsiderado.'; | ||
retorno.mensagem = 'O código inserido possui ' + codigo.length + ' dígitos. Por favor insira uma numeração válida. Códigos de barras SEMPRE devem ter 44 caracteres numéricos. Linhas digitáveis podem possuir 46 (boletos de cartão de crédito), 47 (boletos bancários/cobrança) ou 48 (contas convênio/arrecadação) caracteres numéricos. Qualquer caractere não numérico será desconsiderado.'; | ||
} else if (codigo.substr(0, 1) == '8' && codigo.length == 46 && codigo.length == 47) { | ||
retorno.sucesso = false; | ||
retorno.mensagem = 'Este tipo de boleto deve possuir 44 ou 48 caracteres numéricos.'; | ||
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 { | ||
retorno.sucesso = true; | ||
retorno.mensagem = 'Boleto validado com sucesso'; | ||
retorno.mensagem = 'Boleto válido'; | ||
let tipoCodigo = this.identificarTipoCodigo(codigo); | ||
switch (tipoCodigo) { | ||
case 'LINHA_DIGITAVEL': | ||
retorno.tipoCodigoInput = 'LINHA_DIGITAVEL'; | ||
retorno.tipoBoleto = this.identificarTipoBoleto(codigo, 'LINHA_DIGITAVEL'); | ||
retorno.codigoBarras = this.linhaDigitavel2CodBarras(codigo); | ||
retorno.linhaDigitavel = codigo; | ||
retorno.vencimento = this.identificarData(codigo, 'LINHA_DIGITAVEL'); | ||
retorno.valor = this.identificarValor(codigo, 'LINHA_DIGITAVEL'); | ||
break; | ||
case 'CODIGO_DE_BARRAS': | ||
@@ -410,13 +595,3 @@ retorno.tipoCodigoInput = 'CODIGO_DE_BARRAS'; | ||
retorno.valor = this.identificarValor(codigo, 'CODIGO_DE_BARRAS'); | ||
// retorno.dvCodBarras = this.identificarTipoBoleto(codigo, 'CODIGO_DE_BARRAS') == 'BANCO' ? this.calculaDVCodBarras(codigo, 4, this.identificarReferencia(codigo).mod) : this.calculaDVCodBarras(codigo, 3, this.identificarReferencia(codigo).mod); | ||
break; | ||
case 'LINHA_DIGITAVEL': | ||
retorno.tipoCodigoInput = 'LINHA_DIGITAVEL'; | ||
retorno.tipoBoleto = this.identificarTipoBoleto(codigo, 'LINHA_DIGITAVEL'); | ||
retorno.codigoBarras = this.codBarras2LinhaDigitavel(codigo, false); | ||
// retorno.codigoBarras = this.calculaDVLinhaDigitavel(codigo); | ||
retorno.linhaDigitavel = codigo; | ||
retorno.vencimento = this.identificarData(codigo, 'LINHA_DIGITAVEL'); | ||
retorno.valor = this.identificarValor(codigo, 'LINHA_DIGITAVEL'); | ||
break; | ||
default: | ||
@@ -430,4 +605,12 @@ break; | ||
/** | ||
* CÁLCULO MOD 10 | ||
/** | ||
* Calcula o dígito verificador de uma numeração a partir do módulo 10 | ||
* | ||
* ------------- | ||
* | ||
* @param {string} numero Numeração | ||
* | ||
* ------------- | ||
* | ||
* @return {string} soma | ||
*/ | ||
@@ -457,4 +640,12 @@ exports.calculaMod10 = (numero) => { | ||
/** | ||
* CÁLCULO MOD 11 | ||
/** | ||
* Calcula o dígito verificador de uma numeração a partir do módulo 11 | ||
* | ||
* ------------- | ||
* | ||
* @param {string} numero Numeração | ||
* | ||
* ------------- | ||
* | ||
* @return {string} soma | ||
*/ | ||
@@ -480,4 +671,8 @@ exports.calculaMod11 = (numero) => { | ||
} | ||
/* Utilizar o dígito 1(um) sempre que o resultado do cálculo padrão for igual a 0(zero), 1(um) ou 10(dez). */ | ||
if (digito === 0) { | ||
// Se o resto da divisão for igual a 0 ou 1, o digito será 0 | ||
// Se for igual a 10, o dígito será 1 | ||
if (digito === 0 || digito === 1) { | ||
digito = 0; | ||
} else if (digito === 10) { | ||
digito = 1; | ||
@@ -488,2 +683,16 @@ } | ||
/** | ||
* Função auxiliar para remover os zeros à esquerda dos valores detectados no código inserido | ||
* | ||
* ------------- | ||
* | ||
* @param {string} str Texto a ser verificado | ||
* @param {string} repl Texto que substituirá | ||
* @param {int} inicio Posição inicial | ||
* @param {int} tamanho Tamanho | ||
* | ||
* ------------- | ||
* | ||
* @return {string} resultado | ||
*/ | ||
function substringReplace(str, repl, inicio, tamanho) { | ||
@@ -490,0 +699,0 @@ if (inicio < 0) { |
32862
629
145