Converter fator de vencimento de boleto em data (número de dias)
Neste artigo você vai aprender a converter fator de vencimento de boleto em data, utilizando JavaScript para exibir no formato dd/mm/aaaa

Fala programador(a), beleza? Bora aprender mais sobre conversão de datas e também boletos em JavaScript!
Para realizar esta funcionalidade vamos precisar pegar o começo da última parte do código do boleto, os quatro primeiros dígitos contém a data
Vamos utilizar manipulação de string para resgatar estes dígitos e depois criar uma data baseada em uma fórmula que dá a data
Veja um exemplo prático:
var codigoDeBarras = "52459.12136 21627.007186 37931.981056 7 80260000001400";
var vencimento = codigoDeBarras.slice(40, 44); //7026 é o que precisamos
var date = new Date('10/07/1997');
date.setTime(date.getTime() + (vencimento * 24 * 60 * 60 * 1000)); // criando a data de vencimento
console.log(("0" + (date.getDate())).slice(-2) + '/' + ("0" + (date.getMonth() + 1)).slice(-2) + '/' + date.getFullYear()); // exibição da data
Veja que em vencimento resgatamos os dígitos que representam a data de vencimento “codificada”
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 120 aulas
- 4 projetos
- 9h 45min
E transformamos ela para data legível em date.seTime, que é onde manipulamos nosso objeto Date para a data de vencimento do boleto
Por fim exibimos a data completa por meio dos getters de Date, caso o dia de vencimento seja até 9, adicionamos um 0 a esquerda, que é o padrão convencional
E desta forma conseguimos obter a data de vencimento através do código de barras de um boleto com JavaScript, para apresentar ao usuário no site/sistema
Obs: o horário de verão não está mais em vigor no país, porém caso um dia voltar a existir o código acima pode retornar o dia errado
Então você deve incluir nos seus testes um checagem para esta variável, assim se prevenindo de um eventual erro por causa do mesmo
Conclusão
Neste artigo aprendemos a como converter fator de vencimento de boleto em data
Transformando o número recebido do código de barras para o padrão de data dd/mm/aaaa, que é o utilizado no Brasil
Note que utilizamos manipulação de string para isso, resgatando exatamente os números que são necessários do boleto
E além disso o apoio do objeto Date de JavaScript foi fundamental para trabalhar com datas de forma simples
Confira também nosso catálogo de cursos gratuitos, com aulas semanais no YouTube
O que é o fator de vencimento?
Antes de sair fatiando string, vale entender o porquê da conta funcionar
O fator de vencimento não é uma data, é um CONTADOR de dias
Ele guarda quantos dias se passaram desde uma data base fixa do padrão dos boletos brasileiros, e é por isso que a conversão é sempre a mesma receita: pega a data base, soma os dias do fator e pronto, tu tem o vencimento
Se você já mexeu com timestamp (aquele monte de número que representa um instante), a ideia é a mesma, só que a unidade aqui é dia em vez de milissegundo 🙂
Entendendo isso, o código lá de cima deixa de ser mágica: setTime só está somando os dias do fator na data base
Função pronta pra usar (com validação):
O exemplo acima é ótimo pra entender, mas em sistema de verdade tu não quer aquilo solto no meio do arquivo
Então bora isolar em duas funçõezinhas, uma que converte e outra que formata:
function fatorParaData(fator, dataBase) {
const dias = Number(fator)
if (!Number.isInteger(dias) || dias <= 0) return null
const data = new Date(dataBase.getTime())
data.setDate(data.getDate() + dias)
return data
}
function formatarData(data) {
return ("0" + data.getDate()).slice(-2) + '/' +
("0" + (data.getMonth() + 1)).slice(-2) + '/' +
data.getFullYear()
}
E o uso, com a mesma data base do exemplo lá de cima:
const dataBase = new Date('10/07/1997')
const vencimento = fatorParaData(codigoDeBarras.slice(40, 44), dataBase)
console.log(vencimento ? formatarData(vencimento) : 'fator inválido')
Repara no return null: se vier string vazia, letra ou zero (acontece bastante quando o campo do formulário está incompleto), a função avisa em vez de devolver uma data doida pro usuário
Já me ferrei com isso uma vez, o sistema mostrava um vencimento inventado e ninguém desconfiava
E o caminho contrário, de data para fator de vencimento?
Essa é a dúvida que sempre aparece depois: e se eu já tenho a data e preciso do fator?
É a mesma conta invertida, tu pega a diferença entre as duas datas e divide pelo tamanho de um dia:
function dataParaFator(data, dataBase) {
const umDia = 24 * 60 * 60 * 1000
return Math.round((data.getTime() - dataBase.getTime()) / umDia)
}
O Math.round está ali de propósito, não é frescura: qualquer diferença de horário entre as duas datas gera número quebrado, e arredondar mata esse ruído
Faça o teste, converta um fator pra data com a função anterior e devolva ela pra essa aqui, o número tem que voltar igualzinho
Por que o dia às vezes sai um a mais (ou um a menos)?
Tome cuidado com esse aqui, porque é o bug clássico e ele passa despercebido em teste rápido
O objeto Date carrega HORA junto, não só o dia
Então se a data base nasce grudada na virada do dia, qualquer deslocamento de fuso empurra o resultado pro dia anterior ou pro seguinte, e tu só descobre quando um cliente reclama
O jeito mais simples de blindar é travar o horário da data base longe da virada:
const dataBase = new Date('10/07/1997')
dataBase.setHours(12, 0, 0, 0) // longe da meia noite, o fuso não vira o dia
Com isso a soma de dias pode escorregar algumas horas à vontade que o getDate() continua devolvendo o dia certo
E guarda essa: sempre valide o resultado contra um boleto de verdade que tu já sabe o vencimento, é o teste mais barato que existe
Antes de fatiar, se liga numa coisa: a posição dos dígitos depende do formato da string que tu recebeu
Código com pontos e espaços, código já limpo, código vindo do leitor óptico, cada um tem um tamanho diferente, e um slice fixo em cima do formato errado devolve os dígitos errados sem dar nenhum erro
Então padronize a entrada antes de qualquer coisa e confira o índice usando um código que tu JÁ sabe a data de vencimento, aí sim fixa o número no código
Perguntas frequentes:
O que é o fator de vencimento do boleto?
É um contador de dias, não uma data. Ele diz quantos dias se passaram desde uma data base fixa do padrão dos boletos, e a conversão é somar esses dias na data base
Por que a data que eu converti veio errada?
Quase sempre é um dos dois: tu pegou os dígitos na posição errada (o formato da string mudou) ou o horário da data base está encostado na virada do dia e o fuso empurrou o resultado
Dá pra fazer o contrário, gerar o fator a partir de uma data?
Dá sim, é a mesma conta invertida: diferença entre as duas datas dividida pelo tamanho de um dia, tem a função pronta ali em cima
Essa lógica só funciona em JavaScript?
Não, o conceito é o mesmo em qualquer linguagem, muda só a API de data. Somar dias numa data base é soma de dias em Python, PHP, Java, no que tu quiser 😀
Leia também
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
Blog | Mais populares
As diferenças de var, let e const

Como redirecionar para outra página com JavaScript

Como fazer POST com Fetch API
Neste artigo vou te mostrar como POST com Fetch API, vamos aplicar o recurso de forma fácil com o fetch. Fala programador(a), beleza? Bora aprender […]

Faltou tratar vencimentos superiores a 21/02/2025 quando o fator é maior que 9999.