IBAN
IBANs (International Bank Account Number) brasileiros, com código de país BR: validação, formatação, leitura e decodificação.
Validar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca7 casos falham
- Ruby, biblioteca3 casos falham
- Rust, biblioteca5 casos falham
- .NET, biblioteca5 casos falham
- Erlang, biblioteca
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 geralCouP), 1 indicador de titular (1a9, depoisAaZ). - 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ãoBR15 000000000000 1093 2840 814P 2també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ãoBR1500000000000010932840814P-2eBR15 0000 0000 0000 1093 2840 814P 2sã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âmetro | Tipo | Obrigatório |
|---|---|---|
value | string | sim |
| retorna | boolean |
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
CouP. Titularidade:1a9, depoisAaZ. - 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/javascriptTeste com JavaScript isValidIban
Casos de teste compartilhados (38) e o resultado em cada biblioteca iban.isValid
Formatar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
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-2dá o mesmo resultado da forma compacta. Um valor que não é string retorna uma string vazia. - Um valor parcial é agrupado até onde vai (
BR15dá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âmetro | Tipo | Obrigatório |
|---|---|---|
value | string | sim |
| retorna | string |
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/javascriptTeste com JavaScript formatIban
Casos de teste compartilhados (17) e o resultado em cada biblioteca iban.format
Interpretar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca2 casos falham
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
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âmetro | Tipo | Obrigatório |
|---|---|---|
value | string | number | sim |
| retorna | string |
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/javascriptTeste com JavaScript parseIban
Casos de teste compartilhados (9) e o resultado em cada biblioteca iban.parse
Decodificar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca3 casos falham
- Ruby, biblioteca1 caso falha
- Rust, biblioteca
- .NET, biblioteca1 caso falha
- Erlang, biblioteca
Decompõe um IBAN brasileiro em seus campos. Retorna null sempre que iban.isValid retornaria false.
- Campos, todos strings:
countryCode(sempreBR),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 geralCouP) eowner(1a9, depoisAaZ). 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 retornanull.
| Parâmetro | Tipo | Obrigatório |
|---|---|---|
value | string | sim |
| retorna | IbanInfo | 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(normalmenteCouP) eowner(1a9, depoisAaZ). - 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/javascriptTeste com JavaScript getIbanInfo
Casos de teste compartilhados (22) e o resultado em cada biblioteca iban.getInfo
Fontes oficiais
- bcb.gov.br/estabilidadefinanceira/exibenormativo
- bcb.gov.br/pre/normativos/…/circ_3625_v1_O.pdf
- bcb.gov.br/content/estabilidadefinanceira/…/IBAN-Guidelines_ port.pdf
- iso.org/standard/81090.html
- iso.org/standard/31531.html
Veja também Bancos
Atualizado em
