Dev Tools

Como Decodificar Boleto Bancário

Aprenda como funciona a estrutura de boletos bancários comerciais e de concessionárias. Entenda o cálculo do fator de vencimento, validação de dígitos verificadores e código de barras.

05 de julho de 20269 min de leituraDevThru

O boleto bancário é um dos meios de pagamento mais tradicionais e seguros do mercado brasileiro. Mas, por trás daquela sequência longa de números na linha digitável, existe uma arquitetura lógica e matemática complexa definida pela FEBRABAN (Federação Brasileira de Bancos).

Neste artigo, vamos dissecar o funcionamento da linha digitável e do código de barras de boletos, aprender a calcular a data de vencimento e o valor programaticamente e implementar rotinas de validação completas.

1. A Diferença entre Linha Digitável e Código de Barras

Embora representem o mesmo boleto, eles possuem estruturas diferentes:

  • Código de Barras (44 dígitos): É a representação binária direta lida pelos scanners. Possui formato corrido.
  • Linha Digitável (47 ou 48 dígitos): Criada para digitação manual quando a leitura óptica não funciona. Possui blocos divididos por pontos e inclui dígitos verificadores em cada bloco para evitar erros de digitação.

2. Anatomia do Boleto Comercial (47 dígitos)

Um boleto bancário tradicional de cobrança possui a seguinte divisão na linha digitável:

AAABC.CCDDX  DDDDD.DDDDDY  EEEEE.EEEEEZ  K  UUUUVVVVVVVVVV
  • AAA (Banco Emissor): Os 3 primeiros dígitos indicam o código de compensação do banco (ex: 001 Banco do Brasil, 341 Itaú).
  • B (Moeda): Indica a moeda do boleto (geralmente 9 para o Real).
  • X, Y, Z (DVs dos Blocos): Dígitos verificadores para validação matemática de cada bloco usando o cálculo do Módulo 10.
  • K (Dígito Verificador Geral): Localizado na 33ª posição da linha digitável. Valida toda a estrutura do código de barras de 44 dígitos usando o Módulo 11.
  • UUUU (Fator de Vencimento): 4 dígitos que indicam quantos dias se passaram desde a data base FEBRABAN (07/10/1997).
  • VVVVVVVVVV (Valor): Os últimos 10 dígitos indicam o valor do boleto com centavos (ex: 0000015000 representa R$ 150,00).

3. Calculando o Vencimento e o Estouro do Fator

O fator de vencimento é uma contagem de dias iniciada em 07/10/1997. No entanto, o fator possui limite de 4 dígitos (máximo 9999). Em 22 de Fevereiro de 2025, a contagem atingiu o fator 9999 e estourou. Seguindo a regra oficial da FEBRABAN, o fator reiniciou em 1000 a partir de 23 de Fevereiro de 2025.

Para ler o vencimento de boletos em 2026 e anos seguintes, a sua rotina deve ajustar essa contagem de ciclos somando 9000 dias caso o fator resultante calcule uma data anterior ao estouro. Veja isso implementado no snippet de código a seguir.

4. Implementação Prática em JavaScript

Abaixo está um snippet completo de código em JavaScript para decodificar dados de um boleto de cobrança:

function decodificarBoletoComercial(linha) {
    const cleaned = linha.replace(/\D/g, "");
    if (cleaned.length !== 47) return null;

    // Extrai o código do banco emissor
    const banco = cleaned.substring(0, 3);
    
    // Calcula a data de vencimento
    const fator = parseInt(cleaned.substring(33, 37));
    let vencimento = "Sem vencimento";
    if (fator >= 1000) {
        const dataBase = new Date(1997, 9, 7); // 07/10/1997
        let dataVenc = new Date(dataBase.getTime() + fator * 24 * 60 * 60 * 1000);
        
        // Ajuste de ciclo FEBRABAN pós-2025
        const corteEstouro = new Date(2025, 1, 22);
        if (dataVenc < corteEstouro) {
            dataVenc = new Date(dataVenc.getTime() + 9000 * 24 * 60 * 60 * 1000);
        }
        vencimento = dataVenc.toLocaleDateString("pt-BR");
    }

    // Calcula o valor
    const valorCentavos = parseInt(cleaned.substring(37, 47));
    const valor = valorCentavos / 100;

    return { banco, vencimento, valor };
}

5. Boletos de Concessionárias e Tributos (48 dígitos)

Os boletos de concessionárias (água, luz, telefone) e tributos (IPTU, IPVA, taxas de órgãos municipais/estaduais) seguem uma regra diferente. Eles começam com o dígito 8 e possuem 48 dígitos organizados em 4 blocos de 12. A validação de cada bloco pode ser feita por Módulo 10 ou Módulo 11 dependendo do terceiro dígito do código do boleto.

Erros Comuns na Validação de Boletos

  1. Não sanitizar strings: Pontos, hífens e espaços são incluídos apenas para legibilidade humana. Certifique-se de removê-los com regex (ex: replace(/\D/g, "")) antes de processar o cálculo.
  2. Ignorar o estouro do fator de vencimento: Rotinas antigas de e-commerce e ERP que não ajustam a regra de estouro de 2025 calcularão vencimentos errados em 2026. Mantenha seu backend atualizado.
  3. Confundir Módulo 10 e Módulo 11: Lembre-se que cada bloco da linha comercial usa Módulo 10, mas o DV Geral do código de barras de 44 dígitos usa Módulo 11.

🛠️ Experimente na prática

Use nossas ferramentas online gratuitas — sem cadastro, direto no navegador.

boletosFEBRABANalgoritmofinançasJavaScriptPython

Esse artigo foi útil para você?