Regex brasileiros · Biblioteca de padrões

Regex de linha digitável de boleto (47 dígitos)

Regex para a linha digitável de boleto bancário de 47 dígitos, com a pontuação e os espaços dos campos ou só os números. Não verifica os dígitos de controle.

O padrão

\d{5}\.\d{5} \d{5}\.\d{6} \d{5}\.\d{6} \d \d{14}|\d{47}

Flags: nenhuma. Sem âncoras: para validar um campo inteiro use ^(?:padrão)$.

Só o formato. Este regex confere a aparência do texto. Ele não prova que o dado existe nem que os dígitos verificadores estão certos. Para isso use Decodificador de boleto.

Teste na hora

Tudo roda no seu navegador; nada do que você digita é enviado.

Exemplos

Casam

  • 34191.00000 00000.000000 00000.000000 1 00000000000000
  • 34191000000000000000000000000000100000000000000
  • 23790.12345 67890.123456 78901.234567 8 00000012345678
  • 23790123456789012345678901234567800000012345678

Não casam

  • 3419100000000000000000000000000010000000000000
  • 341910000000000000000000000000001000000000000009
  • 34191,00000 00000.000000 00000.000000 1 00000000000000
  • 34191.0000000000.00000000000.000000100000000000000
  • abc91000000000000000000000000000100000000000000

Como funciona, por partes

Armadilhas

Código pronto

JavaScript

const re = new RegExp("^(?:\\d{5}\\.\\d{5} \\d{5}\\.\\d{6} \\d{5}\\.\\d{6} \\d \\d{14}|\\d{47})$");
console.log(re.test(texto.trim()));

Python

import re

re_linha_digitavel_boleto_47 = re.compile(r"[0-9]{5}\.[0-9]{5} [0-9]{5}\.[0-9]{6} [0-9]{5}\.[0-9]{6} [0-9] [0-9]{14}|[0-9]{47}")
print(bool(re_linha_digitavel_boleto_47.fullmatch(texto.strip())))

C#

using System.Text.RegularExpressions;

var re = new Regex(@"^(?:[0-9]{5}\.[0-9]{5} [0-9]{5}\.[0-9]{6} [0-9]{5}\.[0-9]{6} [0-9] [0-9]{14}|[0-9]{47})\z");
bool ok = re.IsMatch(texto.Trim());

Perguntas frequentes

Qual a diferença entre linha digitável e código de barras?

A linha digitável tem 47 dígitos e é o que se digita; o código de barras tem 44 dígitos, em outra ordem, e é lido pelo leitor óptico. Os dois representam o mesmo boleto e dá para converter de um para o outro.

Como confiro se o boleto está correto?

Cole a linha na ferramenta de decodificação de boleto, que valida os dígitos de controle e mostra banco, valor e vencimento. O regex serve antes, para recusar texto que nem parece um boleto.

Por que guardar só os 47 dígitos?

Porque a pontuação é só apresentação. Com os dígitos puros, comparar duas linhas e achar duplicidade fica trivial.

Ferramentas

← Ver todos os padrões