boleto_utils 1.1.1

SDKflutter
Platformandroidioswindowslinuxmacosweb

Package com métodos para a validação de todos os tipos de boleto do Brasil definidos pela FEBRABAN

📘 Sobre o pacote

boleto_utils é um pacote Dart que fornece utilitários para validação, leitura e interpretação de boletos bancários e de arrecadação. Ele facilita a manipulação de códigos de barras e linhas digitáveis, extraindo informações como banco emissor, valor, vencimento e estrutura interna. Ideal para aplicações financeiras, ERPs, gateways de pagamento ou sistemas de automação que precisem interpretar boletos de forma precisa e eficiente.


✅ Recursos

  • Validar boleto
  • Identificar banco emissor
  • Converter código de barras ⇄ linha digitável
  • Identificar tipo de boleto e tipo de código
  • Obter valor e vencimento (quando aplicável)
  • Cálculo dos dígitos verificadores (Mod10 e Mod11)
  • Compatível com fator de vencimento 2025+

🚀 Métodos disponíveis

MétodoDescrição
TipoCodigo identificarTipoCodigo(String codigo)Retorna TipoCodigo.codigoDeBarra, TipoCodigo.linhaDigitavel ou TipoCodigo.invalido.
TipoBoleto? identificarTipoBoleto(String codigo)Retorna se o boleto é bancário, convênio ou arrecadação.
DateTime identificarData(...)Retorna a data de vencimento do boleto (exceto arrecadação).
DateTime identificarDataComNovoFator2025(...)Mesmo que o anterior, com base na nova referência de fator (22/02/2025).
double identificarValor(String codigo)Retorna o valor do boleto (com casas decimais corretas).
String codBarrasParaLinhaDigitavel(...)Converte código de barras para linha digitável.
String linhaDigitavelParaCodBarras(String codigo)Converte linha digitável para código de barras.
String calculaDVCodBarras(...)Calcula dígito verificador do código de barras usando módulo 10 ou 11.
bool validarCodigoComDV(...)Retorna se o código informado é válido com base no DV.
String calculaMod10(String numero)Cálculo manual de módulo 10.
String calculaMod11(String numero)Cálculo manual de módulo 11.
BoletoValidado validarBoleto(...)Retorna objeto com todos os dados analisados do boleto.
BancoEmissor identificarBancoEmissor(String codigo)Retorna nome, número e ISPB do banco emissor.

🧠 Estrutura dos Boletos

🏦 Boleto Bancário

Código de Barras (44 dígitos)

BlocoPosiçõesDefinição
10 a 2Código do Banco
23 a 3Código da Moeda
34 a 4Dígito verificador geral
45 a 8Fator de vencimento
59 a 18Valor (com 2 casas decimais)
619 a 43Campo livre

Linha Digitável (47 dígitos)

CampoPosiçõesDescrição
A0 a 2Código do banco
B3 a 3Moeda
C4 a 8Campo livre
X9 a 9DV bloco 1
D10 a 19Campo livre
Y20 a 20DV bloco 2
E21 a 30Campo livre
Z31 a 31DV bloco 3
K32 a 32DV geral (mesmo do código de barras)
U33 a 36Fator de vencimento
V37 a 43Valor

🧾 Boleto de Arrecadação / Convênio

Boletos iniciados com 8 (ex: conta de luz, telecom, água...)

Código de Barras (44 dígitos)

BlocoPosiçõesDefinição
10 a 0"8" - Identificador de arrecadação
21 a 1Segmento (veja abaixo)
32 a 2Valor real ou referência
43 a 3Dígito verificador geral
54 a 14Valor (centavos)
615 a 43Campo livre (instituição ou convênio)

Linha Digitável (48 dígitos)

CampoPosiçõesDescrição
A0 a 0"8" Identificação
B1 a 1Segmento
C2 a 2Tipo de valor
D3 a 3DV geral
E4 a 14Valor (centavos)
F15 a 18Identificação do órgão
G19 a 43Campo livre
DV111 a 11DV bloco 1
DV223 a 23DV bloco 2
DV335 a 35DV bloco 3
DV447 a 47DV bloco 4

📚 Segmentos de arrecadação

DígitoSegmento
1Arrecadação municipal
2Saneamento
3Energia elétrica e gás
4Telecomunicações
5Órgãos governamentais
6 / 9Outros
7Multas de trânsito

💡 Observações importantes

  • A data de vencimento só pode ser lida em boletos bancários (com fator de vencimento).
  • Boletos de arrecadação não contêm vencimento codificado — deve ser extraído manualmente ou de fontes externas.
  • O valor em boletos de arrecadação está sempre nas posições 5 a 15 do código de barras e representa centavos.
Exemplo:
Código de barras: 84660000001993000481000112208428092308214933
Valor extraído:   00000119300 → R$ 119,30

📦 Instalação

dependencies:
  boleto_utils:

▶️ Exemplo rápido

import 'package:boleto_utils/boleto_utils.dart';

void main() {
  final codigo = '34191790010104351004791020150008291070000005000';

  final boleto = BoletoUtils();
  final tipo = boleto.identificarTipoBoleto(codigo);
  final valor = boleto.identificarValor(codigo);
  final vencimento = boleto.identificarData(
    codigo: codigo,
    tipoCodigo: TipoCodigo.codigoDeBarras,
  );

  print('Tipo: $tipo');
  print('Valor: R\$ ${valor.toStringAsFixed(2)}');
  print('Vencimento: $vencimento');
}

👨‍💻 Contribuições

Contribuições são bem-vindas! Relate issues ou envie PRs com melhorias e testes.


🤝 Contribuindo

Este projeto é open source. Sinta-se à vontade para:

  • Reportar bugs
  • Sugerir funcionalidades
  • Enviar pull requests com correções ou melhorias
  • Criar issues com dúvidas ou ideias

📄 Licença

Distribuído sob a licença MIT. Consulte o arquivo LICENSE para mais informações.