Conta bancária
Validação dos dígitos verificadores de agência e conta, conforme o banco.
Validar
- JavaScript, biblioteca
- Python, biblioteca
- Go, biblioteca
- Ruby, biblioteca44 casos falham
- Rust, biblioteca
- .NET, biblioteca
- Erlang, biblioteca
Valida uma conta bancária brasileira (código do banco, agência, conta e dígito verificador).
bankCode,agencyeaccounttê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,PeX. Um valor que não é objeto, ou um campo que não é string, torna a conta inválida.paramstrazbankCode(3 dígitos),agency(1 a 5 dígitos),account(1 a 13 dígitos) edigit(1 ou 2 caracteres, ouXpara o Banco do Brasil ePpara o Bradesco), todos como strings.bankCodedeve ser um participante do STR do Banco Central (a lista quebank.getByCodeusa). 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 (
digittem 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 pesos9,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,2sobre 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,9sobre 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,2sobre a conta, módulo 11; resto 0 ou 1 dá0, nos demais casos 11 menos o resto.
- 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á
- 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
digitnumérico (XePnão são aceitos). - Todo outro banco listado usa uma regra genérica de reserva: um
digitde 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:truepara 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âmetro | Tipo | Obrigatório |
|---|---|---|
params | IsValidBankAccountParams | sim |
params.bankCode | string | sim |
params.agency | string | sim |
params.account | string | sim |
params.digit | string | sim |
| retorna | boolean |
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) edigit(1-2 caracteres, ouXpara o Banco do Brasil ePpara 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:
| Banco | Código | Agência | Conta | Observações |
|---|---|---|---|---|
| Banco do Brasil | 001 | 4-5 dígitos | 8-10 dígitos | mod11 com pesos 2..9 ciclando da direita para a esquerda; digit pode ser "X" |
| Santander | 033 | 4 dígitos | 8 dígitos | pesos 9,7,3,1,0,0,9,7,1,3,1,9,7,3 sobre agência + "00" + conta, desprezando as dezenas |
| Banrisul | 041 | 4 dígitos | 9 dígitos | pesos 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 Federal | 104 | 4 dígitos | 11-12 dígitos | mod11 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 |
| Bradesco | 237 | 4 dígitos | 7 dígitos | mod11 com pesos 2..7 ciclando da direita para a esquerda; resto 0 gera 0 e resto 1 gera "P" |
| Nubank | 260 | 4 dígitos | 5-13 dígitos | dígito de Verhoeff sobre a conta, ignorando zeros à esquerda (sem regra publicada; veja acima) |
| Itaú Unibanco | 341 | 4 dígitos | 5 dígitos | mod10 sobre agência + conta |
| HSBC / Kirton Bank | 399 | 4 dígitos | 6 dígitos | pesos 8,9,2,3,4,5,6,7,8,9 sobre agência + conta; resto 10 gera 0 |
| Citibank | 745 | 4 dígitos | 10 dígitos | pesos 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):
| Banco | Código | Banco | Código | |
|---|---|---|---|---|
| Inter | 077 | Mercado Pago | 323 | |
| Ailos | 085 | C6 | 336 | |
| XP | 102 | PicPay | 380 | |
| Unicred | 136 | Cora | 403 | |
| Stone | 197 | Pan | 623 | |
| BTG Pactual | 208 | BV | 655 | |
| Original | 212 | Daycoval | 707 | |
| PagBank | 290 | Sicredi | 748 | |
| BMG | 318 | Sicoob | 756 |
- Todo outro banco da lista usa o fallback genérico:
digitprecisa bater com mod10 ou mod11 sobre a conta. Umdigitde 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ãotruepara 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/javascriptTeste com JavaScript isValidBankAccount
Casos de teste compartilhados (143) e o resultado em cada biblioteca bankAccount.isValid
Fontes oficiais
- bcb.gov.br/content/estabilidadefinanceira/…/ParticipantesSTR.csv
- caixa.gov.br/Downloads/cobranca-caixa/…/Manual_de_Leiaute_de_Arquivo_Eletronico_CNAB_400.pdf
- caixa.gov.br/Downloads/cobranca-caixa/…/Manual_de_Leiaute_de_Arquivo_Eletronico_CNAB_240.pdf
- santander.com.br/layout-de-arquivos
- bb.com.br/docs/pub/…/Doc5175Bloqueto.pdf
- cmsarquivos.febraban.org.br/Arquivos/documentos/…/Layout padrao CNAB240 V 11_0 - 2026_09_11.pdf
Veja também Bancos
Atualizado em
