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
Exercícios de lógica de programação JavaScript com gabarito
Quais são os melhores exercícios lógica de programação JavaScript? Colocar em prática os exercícios de lógica de programação em JavaScript é de extrema importância para […]

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