boleto_utils 1.1.1
boleto_utils: ^1.1.1 copied to clipboard
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étodo | Descriçã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)
| Bloco | Posições | Definição |
|---|---|---|
| 1 | 0 a 2 | Código do Banco |
| 2 | 3 a 3 | Código da Moeda |
| 3 | 4 a 4 | Dígito verificador geral |
| 4 | 5 a 8 | Fator de vencimento |
| 5 | 9 a 18 | Valor (com 2 casas decimais) |
| 6 | 19 a 43 | Campo livre |
Linha Digitável (47 dígitos)
| Campo | Posições | Descrição |
|---|---|---|
| A | 0 a 2 | Código do banco |
| B | 3 a 3 | Moeda |
| C | 4 a 8 | Campo livre |
| X | 9 a 9 | DV bloco 1 |
| D | 10 a 19 | Campo livre |
| Y | 20 a 20 | DV bloco 2 |
| E | 21 a 30 | Campo livre |
| Z | 31 a 31 | DV bloco 3 |
| K | 32 a 32 | DV geral (mesmo do código de barras) |
| U | 33 a 36 | Fator de vencimento |
| V | 37 a 43 | Valor |
🧾 Boleto de Arrecadação / Convênio #
Boletos iniciados com
8(ex: conta de luz, telecom, água...)
Código de Barras (44 dígitos)
| Bloco | Posições | Definição |
|---|---|---|
| 1 | 0 a 0 | "8" - Identificador de arrecadação |
| 2 | 1 a 1 | Segmento (veja abaixo) |
| 3 | 2 a 2 | Valor real ou referência |
| 4 | 3 a 3 | Dígito verificador geral |
| 5 | 4 a 14 | Valor (centavos) |
| 6 | 15 a 43 | Campo livre (instituição ou convênio) |
Linha Digitável (48 dígitos)
| Campo | Posições | Descrição |
|---|---|---|
| A | 0 a 0 | "8" Identificação |
| B | 1 a 1 | Segmento |
| C | 2 a 2 | Tipo de valor |
| D | 3 a 3 | DV geral |
| E | 4 a 14 | Valor (centavos) |
| F | 15 a 18 | Identificação do órgão |
| G | 19 a 43 | Campo livre |
| DV1 | 11 a 11 | DV bloco 1 |
| DV2 | 23 a 23 | DV bloco 2 |
| DV3 | 35 a 35 | DV bloco 3 |
| DV4 | 47 a 47 | DV bloco 4 |
📚 Segmentos de arrecadação #
| Dígito | Segmento |
|---|---|
| 1 | Arrecadação municipal |
| 2 | Saneamento |
| 3 | Energia elétrica e gás |
| 4 | Telecomunicações |
| 5 | Órgãos governamentais |
| 6 / 9 | Outros |
| 7 | Multas 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.