IBAN

IBANs (International Bank Account Number) brasileiros, com código de país BR: validação, formatação, leitura e decodificação.

  • Matriz de paridade

Validar

Valida um IBAN brasileiro. Um IBAN de qualquer outro país é inválido.

  • Leiaute, 29 caracteres: BR, 2 dígitos verificadores (ISO 7064 MOD 97-10), ISPB de 8 caracteres (dígitos ou letras), agência de 5 dígitos, conta de 10 dígitos, tipo de conta de 1 letra (em geral C ou P), 1 indicador de titular (1 a 9, depois A a Z).
  • Aceita a forma compacta ou grupos de 4 separados por espaço em branco, ., - ou /, em maiúsculas ou minúsculas, com espaços opcionais nas pontas do valor. O separador é opcional em cada fronteira de grupo, então BR15 000000000000 1093 2840 814P 2 também é válido. Os separadores são os caracteres de máscara intercambiáveis do CPF e do CNPJ, sozinhos ou em sequência (a ISO 13616 imprime um espaço), então BR1500000000000010932840814P-2 e BR15 0000 0000 0000 1093 2840 814P 2 são o mesmo IBAN. Até a 2.4.0 uma sequência de separadores entre dois grupos tornava o IBAN inválido.
  • Um separador fora da fronteira de um grupo, ou qualquer caractere que não seja letra, dígito ou um desses separadores, torna o IBAN inválido (BR15 000 00000 0000 1093 2840 814P 2). O caractere não é descartado. Um valor que não é string é inválido.
  • O leiaute é definido pela Resolução BCB 585/2026, art. 2º, que revogou a Circular BCB 3.625/2013 e manteve o leiaute. O art. 2º, III, define o ISPB como "oito caracteres alfanuméricos", então uma letra no ISPB é aceita, em qualquer caixa. A 2.4.0 só aceitava dígitos ali. As demais posições numéricas continuam rejeitando letra.
  • O tipo de conta segue o padrão do registro ISO 13616 (uma letra). O art. 2º, VI, o chama de "um caractere alfanumérico"; a forma do registro é mantida, então um dígito nessa posição é rejeitado.
ParâmetroTipoObrigatório
valuestringsim
retornaboolean

Valida um IBAN (International Bank Account Number) brasileiro. Somente IBANs brasileiros (código de país BR) são reconhecidos; qualquer outro país retorna false.

  • Layout, 29 caracteres (Resolução BCB 585/2026, art. 2º, que revogou a Circular BCB 3.625/2013 e manteve o layout): BR, 2 dígitos verificadores (ISO 7064 MOD 97-10), ISPB de 8 caracteres, agência de 5, conta de 10, 1 letra de tipo de conta, 1 indicador de titularidade.
  • O ISPB pode ter letras: a Resolução o define como "oito caracteres alfanuméricos", onde a Circular dizia "numéricos". Até a 2.4.0 só dígitos eram aceitos.
  • Tipo de conta: qualquer letra, normalmente C ou P. Titularidade: 1 a 9, depois A a Z.
  • Aceita a forma compacta ou grupos de 4 separados por um espaço, ., - ou /, em maiúsculas ou minúsculas.
import { isValidIban } from '@brazilian-utils/brazilian-utils';

isValidIban('BR1500000000000010932840814P2'); // true
isValidIban('BR15 0000 0000 0000 1093 2840 814P 2'); // true (espaços de agrupamento)
isValidIban('BR15-0000-0000-0000-1093-2840-814P-2'); // true (qualquer um dos caracteres de máscara)
isValidIban('BR1012AB34CD000010932840814P2'); // true (ISPB alfanumérico)
isValidIban('BR1500000000000010932840814P3'); // false (dígitos verificadores inválidos)
isValidIban('BR15 000 00000 0000 1093 2840 814P 2'); // false (separador dentro de um grupo)
isValidIban('DE89370400440532013000'); // false (IBAN não brasileiro)

Fonte: Diretrizes de Implementação do IBAN no Brasil, Resolução BCB nº 585/2026, que revogou a Circular BCB nº 3.625/2013, ISO 13616-1:2020.

Código: brazilian-utils/javascript
Teste com JavaScript isValidIban
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (38) e o resultado em cada biblioteca iban.isValid

Formatar

Formata um IBAN no agrupamento de impressão da ISO 13616: blocos de 4 caracteres separados por espaços, em maiúsculas. Não valida o IBAN (use iban.isValid).

Extratos e formulários bancários mostram o IBAN nessa forma.

  • A função lê apenas letras e dígitos. O resultado é limitado aos 29 caracteres de um IBAN brasileiro.
  • Todo outro caractere (hífen, ponto, espaço em branco extra) é descartado, então BR15 0000-0000.0000/1093 2840 814P-2 dá o mesmo resultado da forma compacta. Um valor que não é string retorna uma string vazia.
  • Um valor parcial é agrupado até onde vai (BR15 dá BR15), então a função serve como máscara de entrada. Os dígitos verificadores e o leiaute não são conferidos, e um IBAN de outro país é agrupado do mesmo jeito.
ParâmetroTipoObrigatório
valuestringsim
retornastring

Formata um IBAN no agrupamento impresso da ISO 13616: blocos de 4 caracteres, a apresentação usada em extratos e formulários bancários. Não valida; para isso, use isValidIban.

  • Limita o resultado a 29 caracteres, o tamanho de um IBAN brasileiro.
import { formatIban } from '@brazilian-utils/brazilian-utils';

formatIban('BR1500000000000010932840814P2'); // 'BR15 0000 0000 0000 1093 2840 814P 2'
formatIban('br1500000000000010932840814p2'); // 'BR15 0000 0000 0000 1093 2840 814P 2'
formatIban('BR15'); // 'BR15'
formatIban('BR15 0000-0000.0000/1093 2840 814P-2'); // 'BR15 0000 0000 0000 1093 2840 814P 2' (só letras e dígitos são lidos)

Fonte: Diretrizes de Implementação do IBAN no Brasil, Resolução BCB nº 585/2026, que revogou a Circular BCB nº 3.625/2013, ISO 13616-1:2020.

Código: brazilian-utils/javascript
Teste com JavaScript formatIban
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (17) e o resultado em cada biblioteca iban.format

Interpretar

Remove a formatação do IBAN e mantém letras e dígitos em maiúsculas, limitados a 29 caracteres.

  • Um número só é lido se for um inteiro seguro não negativo. Número negativo, fracionário, não finito ou inseguro retorna uma string vazia (a 2.4.0 lia os caracteres de qualquer número, descartando sinal e ponto decimal).
  • Todo caractere que não é letra nem dígito é descartado e as letras viram maiúsculas.
  • Uma string é lida como está, então um valor sem letra nem dígito, e um valor que não é string nem número, retornam uma string vazia.
ParâmetroTipoObrigatório
valuestring | numbersim
retornastring

Remove a formatação do IBAN, mantém as letras e os dígitos, coloca o resultado em maiúsculas e o limita aos 29 caracteres de um IBAN brasileiro.

import { parseIban } from '@brazilian-utils/brazilian-utils';

parseIban('BR15 0000 0000 0000 1093 2840 814P 2'); // 'BR1500000000000010932840814P2'
parseIban('br15-0000.0000/0000 1093 2840 814p-2'); // 'BR1500000000000010932840814P2'

Fonte: Diretrizes de Implementação do IBAN no Brasil, Resolução BCB nº 585/2026, que revogou a Circular BCB nº 3.625/2013, ISO 13616-1:2020.

Código: brazilian-utils/javascript
Teste com JavaScript parseIban
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (9) e o resultado em cada biblioteca iban.parse

Decodificar

Decompõe um IBAN brasileiro em seus campos. Retorna null sempre que iban.isValid retornaria false.

  • Campos, todos strings: countryCode (sempre BR), checkDigits (2 dígitos), bankIspb (8 caracteres, com letras maiúsculas permitidas desde a Resolução BCB 585/2026), branch (5 dígitos), account (10 dígitos), accountType (1 letra, em geral C ou P) e owner (1 a 9, depois A a Z). As letras vêm em maiúsculas e os zeros de preenchimento são mantidos.
  • As regras de entrada são as de iban.isValid: a forma compacta ou agrupada, uma sequência de caracteres de máscara entre os grupos, qualquer caixa. Um valor que não é string retorna null.
ParâmetroTipoObrigatório
valuestringsim
retornaIbanInfo | null

Interpreta um IBAN brasileiro em seus campos. Retorna um objeto IbanInfo, ou null sempre que isValidIban retornaria false.

  • Campos, todos strings: countryCode, checkDigits, bankIspb, branch, account, accountType (normalmente C ou P) e owner (1 a 9, depois A a Z).
  • Mesmas regras de entrada de isValidIban.
import { getIbanInfo } from '@brazilian-utils/brazilian-utils';

getIbanInfo('BR1500000000000010932840814P2');
// {
//   countryCode: 'BR',
//   checkDigits: '15',
//   bankIspb: '00000000',
//   branch: '00001',
//   account: '0932840814',
//   accountType: 'P',
//   owner: '2'
// }

getIbanInfo('DE89370400440532013000'); // null (IBAN não brasileiro)
getIbanInfo('BR15 000 00000 0000 1093 2840 814P 2'); // null (separador dentro de um grupo)

Fonte: Diretrizes de Implementação do IBAN no Brasil, Resolução BCB nº 585/2026, que revogou a Circular BCB nº 3.625/2013, ISO 13616-1:2020.

Código: brazilian-utils/javascript
Teste com JavaScript getIbanInfo
As entradas começam com o primeiro caso compartilhado. Mude uma para ver o novo resultado.

Roda @brazilian-utils/brazilian-utils 2.5.0 no seu navegador.

Casos de teste compartilhados (22) e o resultado em cada biblioteca iban.getInfo

Fontes oficiais

Veja também Bancos

Atualizado em

Nesta página