Conta bancária

Validação dos dígitos verificadores de agência e conta, conforme o banco.

  • Matriz de paridade

Validar

Valida uma conta bancária brasileira (código do banco, agência, conta e dígito verificador).

  • bankCode, agency e account têm todo caractere que não é dígito removido ("1-584" e "0021.0169" são lidos como dígitos). digit é convertido para maiúsculas e mantém só dígitos, P e X. Um valor que não é objeto, ou um campo que não é string, torna a conta inválida.
  • params traz bankCode (3 dígitos), agency (1 a 5 dígitos), account (1 a 13 dígitos) e digit (1 ou 2 caracteres, ou X para o Banco do Brasil e P para o Bradesco), todos como strings.
  • bankCode deve ser um participante do STR do Banco Central (a lista que bank.getByCode usa). A função rejeita qualquer outro código.
  • Nove bancos são verificados com uma regra de dígito verificador, cada um com seus tamanhos de agência e conta (digit tem um caractere):
    • Banco do Brasil (001): agência de 4 a 5 dígitos, conta de 8 a 10 dígitos. Módulo 11 sobre a conta, com pesos de 2 a 9 repetidos em ciclo da direita para a esquerda; resultado 10 dá X.
    • Santander (033): agência de 4 dígitos, conta de 8 dígitos. Sobre agência + 00 + conta, com pesos 9,7,3,1,0,0,9,7,1,3,1,9,7,3, mantendo só o algarismo das unidades de cada produto; o dígito é (10 - soma mod 10) mod 10.
    • Banrisul (041): agência de 4 dígitos, conta de 9 dígitos (tipo de 2 dígitos + conta de 7 dígitos). Pesos 3,2,4,7,6,5,4,3,2 sobre a conta, módulo 11; resto 0 dá 0, resto 1 dá 6, nos demais casos 11 menos o resto.
    • Caixa (104): agência de 4 dígitos, conta de 11 ou 12 dígitos. Veja abaixo.
    • Bradesco (237): agência de 4 dígitos, conta de 7 dígitos. Módulo 11 sobre a conta, com pesos de 2 a 7 repetidos em ciclo da direita para a esquerda; resultado 10 dá P.
    • Nubank (260): agência de 4 dígitos, conta de 5 a 13 dígitos. Dígito Verhoeff sobre a conta, sem os zeros à esquerda.
    • Itaú (341): agência de 4 dígitos, conta de 5 dígitos. Módulo 10 sobre agência + conta.
    • HSBC/Kirton (399): agência de 4 dígitos, conta de 6 dígitos. Pesos 8,9,2,3,4,5,6,7,8,9 sobre agência + conta, módulo 11; resto 10 dá 0.
    • Citibank (745): agência de 4 dígitos, conta de 10 dígitos. Pesos 11,10,9,8,7,6,5,4,3,2 sobre a conta, módulo 11; resto 0 ou 1 dá 0, nos demais casos 11 menos o resto.
  • Nenhum ato do Banco Central, de outro órgão do governo ou da FEBRABAN define essas regras. O leiaute CNAB 240 da FEBRABAN (v11.0, notas G009 a G012) chama cada dígito verificador de "código adotado pelo Banco" e não traz algoritmo.
  • Fonte oficial (o manual de leiaute do próprio banco): Caixa (os dois dígitos, notas NE051/NE052 do CNAB 400 e nota G011 do CNAB 240), Santander (o dígito da conta, Débito Automático 150 posições v08, abril/2026) e Banco do Brasil (o dígito da agência, Doc5175 Anexo XI; o manual só chama o dígito da conta de "módulo 11", o que confere com a regra daqui). As regras daqui conferem com os exemplos resolvidos deles.
  • Compêndio de terceiros: as demais regras (Banrisul, Bradesco, Itaú, HSBC/Kirton, Citibank e a forma de 11 dígitos da Caixa) seguem o compêndio "Regras de Validação de dígito verificador de agência e conta corrente" da Icatu Seguros, uma compilação privada. O Nubank não publica regra; o dígito Verhoeff vem de validadores de código aberto que o deduziram de contas reais.
  • Caixa (104): a agência tem 4 dígitos e o dígito tem 1 caractere. Uma conta de 12 dígitos (a forma "sem operação" dos leiautes da Caixa) aceita qualquer um dos dois dígitos da Caixa: o dígito da conta sobre os 12 dígitos (exemplo oficial: 000000109990 dá 6) ou o dígito agência+conta (0161 + 000000109990 dá 5). Os dois são módulo 11 com pesos de 2 a 9 da direita para a esquerda, e resultado acima de 9 vira 0. A forma antiga de 11 dígitos, operação (3 dígitos) + conta (8 dígitos), mantém a regra agência+conta do compêndio. A 2.4.0 rejeitava conta Caixa de 12 dígitos.
  • Estes bancos são verificados só pela estrutura, porque não se conhece regra de dígito verificador deles: Inter (077), Ailos (085), XP (102), Unicred (136), Stone (197), BTG Pactual (208), Original (212), PagBank (290), BMG (318), Mercado Pago (323), C6 (336), PicPay (380), Cora (403), Pan (623), BV (655), Daycoval (707), Sicredi (748) e Sicoob (756). Agência (1 a 5 dígitos) e conta (1 a 13 dígitos) só precisam caber nos tamanhos, e basta um único digit numérico (X e P não são aceitos).
  • Todo outro banco listado usa uma regra genérica de reserva: um digit de 1 caractere precisa ser igual ao mod 10, ao mod 11 de boleto ou ao mod 11 bancário da conta, então até três dos dez dígitos passam para uma mesma conta. Um dígito de 2 caracteres encadeia mod 10 e depois mod 11. Nenhuma regra publicada sustenta essa regra de reserva: true para um banco fora das listas acima diz que a estrutura é plausível, não que o dígito verificador está provado.
  • No Banco do Brasil o dígito da agência não é conferido. Uma agência de 5 dígitos (1584-9) só é verificada quanto ao tamanho, qualquer que seja o seu último dígito.
ParâmetroTipoObrigatório
paramsIsValidBankAccountParamssim
params.bankCodestringsim
params.agencystringsim
params.accountstringsim
params.digitstringsim
retornaboolean

Valida uma conta bancária brasileira. O bankCode precisa ser um participante do STR do Banco Central (a lista que getBankByCode usa).

  • Parâmetros (IsValidBankAccountParams, todos strings): bankCode (3 dígitos), agency (1-5 dígitos), account (1-13 dígitos) e digit (1-2 caracteres, ou X para o Banco do Brasil e P para o Bradesco).
  • Um banco da lista é validado de uma de três formas: por uma regra de dígito verificador, apenas pela estrutura ou por um fallback genérico mod10/mod11.
  • Nenhum ato do Banco Central, de outro órgão de governo ou da Febraban define essas regras de dígito verificador. As dos bancos 001, 033, 041, 104, 237, 341, 399 e 745 vêm do compêndio "Regras de Validação de dígito verificador de agência e conta corrente" da Icatu Seguros, uma compilação privada da regra de cada banco. O Nubank não publica regra: o dígito de Verhoeff é o que validadores de código aberto deduziram de contas reais.
  • Três bancos publicam a própria regra nos seus manuais de leiaute, e as regras daqui batem com elas: a Caixa os dois dígitos sobre a conta de 12 dígitos (notas NE051 e NE052), o Santander o dígito da conta (Débito Automático 150 v08, abril de 2026) e o Banco do Brasil só o dígito da agência (Anexo XI); do dígito da conta ele diz só "módulo 11".
  • Os únicos textos oficiais sobre esses dígitos dizem que não há regra comum: o Layout Padrão CNAB 240 v11.0 da FEBRABAN (11/09/2026), notas G009, G011 e G012, chama cada um deles de "código adotado pelo Banco" e não dá algoritmo, e a API do DICT do Banco Central recebe a conta com o dígito e não calcula nada.

Bancos validados por uma regra de dígito verificador:

BancoCódigoAgênciaContaObservações
Banco do Brasil0014-5 dígitos8-10 dígitosmod11 com pesos 2..9 ciclando da direita para a esquerda; digit pode ser "X"
Santander0334 dígitos8 dígitospesos 9,7,3,1,0,0,9,7,1,3,1,9,7,3 sobre agência + "00" + conta, desprezando as dezenas
Banrisul0414 dígitos9 dígitospesos 3,2,4,7,6,5,4,3,2; resto 0 gera 0 e resto 1 gera 6; account é tipo (2 dígitos) + conta (7 dígitos)
Caixa Econômica Federal1044 dígitos11-12 dígitosmod11 com pesos 2..9 em ciclo a partir da direita, e resultado acima de 9 vira 0. Uma account de 12 dígitos (o formato dos leiautes da Caixa, "sem operação") aceita tanto o dígito da conta (sobre a conta) quanto o de agência/conta (sobre agência + conta); uma de 11 dígitos é operação (3 dígitos) + conta (8 dígitos), com o dígito sobre agência + conta. Até a 2.4.0 a conta de 12 dígitos era rejeitada
Bradesco2374 dígitos7 dígitosmod11 com pesos 2..7 ciclando da direita para a esquerda; resto 0 gera 0 e resto 1 gera "P"
Nubank2604 dígitos5-13 dígitosdígito de Verhoeff sobre a conta, ignorando zeros à esquerda (sem regra publicada; veja acima)
Itaú Unibanco3414 dígitos5 dígitosmod10 sobre agência + conta
HSBC / Kirton Bank3994 dígitos6 dígitospesos 8,9,2,3,4,5,6,7,8,9 sobre agência + conta; resto 10 gera 0
Citibank7454 dígitos10 dígitospesos 11..2 sobre a conta; resto 0 ou 1 gera 0

Bancos validados apenas pela estrutura, já que não se conhece regra de dígito verificador deles (um único digit numérico basta):

BancoCódigoBancoCódigo
Inter077Mercado Pago323
Ailos085C6336
XP102PicPay380
Unicred136Cora403
Stone197Pan623
BTG Pactual208BV655
Original212Daycoval707
PagBank290Sicredi748
BMG318Sicoob756
  • Todo outro banco da lista usa o fallback genérico: digit precisa bater com mod10 ou mod11 sobre a conta. Um digit de 2 caracteres encadeia mod10 e depois mod11. Nenhuma regra publicada o sustenta e até três dos dez dígitos passam para uma mesma conta, então true para um banco fora das tabelas acima diz que a estrutura é plausível, não que o dígito verificador foi comprovado.
  • Para o Banco do Brasil o dígito da agência não é verificado: uma agência de 5 dígitos (1584-9) só é conferida no tamanho, seja qual for o último dígito.
import { isValidBankAccount } from '@brazilian-utils/brazilian-utils';

isValidBankAccount({
  bankCode: '001',
  agency: '1584',
  account: '00210169',
  digit: '6'
}); // true (Banco do Brasil)

isValidBankAccount({
  bankCode: '341',
  agency: '2545',
  account: '02366',
  digit: '1'
}); // true (Itaú)

isValidBankAccount({
  bankCode: '104',
  agency: '0647',
  account: '00188888888',
  digit: '7'
}); // true (Caixa: operação "001" + conta "88888888")

isValidBankAccount({
  bankCode: '041',
  agency: '2664',
  account: '358507670',
  digit: '6'
}); // true (Banrisul: tipo "35" + conta "8507670")

isValidBankAccount({
  bankCode: '260',
  agency: '0001',
  account: '5216125',
  digit: '0'
}); // true (Nubank, Verhoeff)

isValidBankAccount({
  bankCode: '077',
  agency: '0001',
  account: '123456789',
  digit: '0'
}); // true (Banco Inter, apenas estrutura)

isValidBankAccount({
  bankCode: '077',
  agency: '0001',
  account: '123456789',
  digit: 'X'
}); // false (banco validado por estrutura ainda exige dígito numérico)

isValidBankAccount({
  bankCode: '999',
  agency: '1234',
  account: '123456',
  digit: '6'
}); // false (999 não é participante do Banco Central)

isValidBankAccount({
  bankCode: '246',
  agency: '1234',
  account: '123456',
  digit: '6'
}); // true (Banco ABC Brasil, fallback genérico mod10)

Fonte: lista de participantes do STR (oficial). Baseado em: o compêndio da Icatu Seguros Regras de Validação de dígito verificador de agência e conta corrente e, para o Nubank, o bran_checker.

Código: brazilian-utils/javascript
Teste com JavaScript isValidBankAccount
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 (143) e o resultado em cada biblioteca bankAccount.isValid

Fontes oficiais

Veja também Bancos

Atualizado em

Nesta página