Chave de acesso da NF-e: gerar, validar e decompor
Cole uma chave de 44 posições para ver cada campo e conferir o dígito, ou gere chaves fictícias para testar o seu sistema.
Para conferir o documento de verdade: Portal Nacional da NF-e (abre em nova aba)
Número gerado
3522 0466 1268 2000 0132 5500 1619 5805 9313 1134 9500
CSV (Excel) abre com dois cliques no Excel em português (ponto e vírgula, acentos certos). CSV usa vírgula, para programas e scripts. SQL sai sempre sem máscara, para caber na coluna de tamanho fixo. Importe como texto, para não perder os zeros à esquerda.
Validar e decompor a chave de acesso
Confere no seu navegador. Nada do que você digita ou cola é enviado.
Validar em lote: cole uma coluna da planilha
CSV (Excel) abre com dois cliques no Excel em português (ponto e vírgula, acentos certos). CSV usa vírgula, para programas e scripts.
A chave de acesso da NF-e tem 44 posições: UF, ano e mês de emissão, CNPJ do emitente, modelo, série, número da nota, tipo de emissão, código numérico e um dígito verificador calculado por módulo 11. Esta página separa esses campos, confere o dígito e gera chaves fictícias para teste. Ela não busca a nota em nenhum cadastro: para ver uma NF-e de verdade, use o Portal Nacional da NF-e (abre em nova aba).
Como usar
- Para separar os campos e validar (aba "Validar e decompor"): cole a chave, com ou sem espaços. A página mostra cada campo, diz se o dígito verificador confere e aponta o que estiver fora do esperado, como UF inexistente ou mês 13.
- Para gerar: escolha a UF, o mês de emissão, o modelo (55 ou 65) e, se quiser, o tipo de CNPJ do emitente (numérico ou alfanumérico), a série e o número. O que ficar em branco é sorteado. O CNPJ do emitente é sempre sorteado: o campo só escolhe se ele vem com ou sem letras.
- Para o lote: informe a quantidade, de 1 a 10.000, e baixe em lista, CSV, CSV (Excel), JSON ou SQL.
Os campos da chave de acesso
A chave não é um número aleatório. Ela junta, sempre na mesma ordem, dados que já estão na nota. O exemplo fictício abaixo é 3526 1111 2223 3300 0181 5500 1000 0001 2311 2345 6787.
| Campo | Posições | Tamanho | No exemplo | O que é |
|---|---|---|---|---|
| cUF | 1 e 2 | 2 | 35 | Código da UF do emitente (35 é São Paulo) |
| AAMM | 3 a 6 | 4 | 2611 | Ano e mês de emissão (novembro de 2026) |
| CNPJ | 7 a 20 | 14 | 11222333000181 | CNPJ do emitente |
| mod | 21 e 22 | 2 | 55 | Modelo: 55 para NF-e, 65 para NFC-e |
| serie | 23 a 25 | 3 | 001 | Série da nota |
| nNF | 26 a 34 | 9 | 000000123 | Número da nota |
| tpEmis | 35 | 1 | 1 | Tipo de emissão (1 é a emissão normal) |
| cNF | 36 a 43 | 8 | 12345678 | Código numérico gerado pelo emitente |
| cDV | 44 | 1 | 7 | Dígito verificador |
A composição da chave está no Manual de Orientação do Contribuinte, publicado no Portal Nacional da NF-e. Série e número entram com zeros à esquerda, por isso a chave tem sempre 44 posições.
Códigos de UF usados na chave
As duas primeiras posições são o código do IBGE para o estado do emitente.
| Código | UF | Código | UF | Código | UF | Código | UF |
|---|---|---|---|---|---|---|---|
| 11 | RO | 21 | MA | 28 | SE | 42 | SC |
| 12 | AC | 22 | PI | 29 | BA | 43 | RS |
| 13 | AM | 23 | CE | 31 | MG | 50 | MS |
| 14 | RR | 24 | RN | 32 | ES | 51 | MT |
| 15 | PA | 25 | PB | 33 | RJ | 52 | GO |
| 16 | AP | 26 | PE | 35 | SP | 53 | DF |
| 17 | TO | 27 | AL | 41 | PR | sem valor | sem valor |
Como o dígito verificador é calculado
O dígito é um módulo 11 sobre as 43 primeiras posições. Comece pela direita e multiplique cada posição pelos pesos 2, 3, 4, 5, 6, 7, 8 e 9. Depois do 9, volte ao 2 e continue até a primeira posição. Some os produtos e pegue o resto da divisão por 11. Se o resto for 0 ou 1, o dígito é 0. Senão, é 11 menos o resto.
No exemplo, a soma dos 43 produtos é 488. O resto de 488 por 11 é 4, e 11 − 4 = 7. Por isso a chave termina em 7. Cole a chave no painel para ver a conta posição por posição.
O dígito cobre a chave inteira. Trocar qualquer campo, como o número da nota ou o mês, muda o resultado. É por isso que não dá para "consertar" uma chave editando um pedaço à mão.
Digite um número completo para ver a conta.
Conta feita com o número 3526 1111 2223 3300 0181 5500 1000 0001 2311 2345 6787.
Gere ou valide outro acima e a conta muda junto.
Dígito verificador
| Caractere | 3 | 5 | 2 | 6 | 1 | 1 | 1 | 1 | 2 | 2 | 2 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Posição | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| Valor (ASCII − 48) | 3 | 5 | 2 | 6 | 1 | 1 | 1 | 1 | 2 | 2 | 2 |
| Peso | 4 | 3 | 2 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
| Produto | 12 | 15 | 4 | 54 | 8 | 7 | 6 | 5 | 8 | 6 | 4 |
| Caractere | 3 | 3 | 3 | 0 | 0 | 0 | 1 | 8 | 1 | 5 | 5 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Posição | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| Valor (ASCII − 48) | 3 | 3 | 3 | 0 | 0 | 0 | 1 | 8 | 1 | 5 | 5 |
| Peso | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 9 | 8 | 7 |
| Produto | 27 | 24 | 21 | 0 | 0 | 0 | 3 | 16 | 9 | 40 | 35 |
| Caractere | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 2 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Posição | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 |
| Valor (ASCII − 48) | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 2 |
| Peso | 6 | 5 | 4 | 3 | 2 | 9 | 8 | 7 | 6 | 5 | 4 |
| Produto | 0 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 5 | 8 |
| Caractere | 3 | 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|---|---|
| Posição | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 |
| Valor (ASCII − 48) | 3 | 1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| Peso | 3 | 2 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
| Produto | 9 | 2 | 9 | 16 | 21 | 24 | 25 | 24 | 21 | 16 |
Resto 4 é maior que 1, então DV = 11 − 4 = 7.
Chave com CNPJ alfanumérico
Com o CNPJ alfanumérico, as posições 7 a 20 da chave podem ter letras. A Nota Técnica Conjunta 2025.001, dos documentos fiscais eletrônicos, trata dessa mudança. A conta do dígito é a mesma, com um passo a mais: cada caractere entra pelo código ASCII menos 48. Os números continuam valendo de 0 a 9, e as letras valem de 17 (A) a 42 (Z).
Exemplo fictício com o emitente 12.ABC.345/01DE-35: as 43 primeiras posições são 35261112ABC34501DE3555001000000123112345678, a soma dá 828, o resto é 3 e o dígito é 8.
- Guarde a chave como texto de 44 caracteres. Ela nunca coube em coluna numérica, e agora nem só de dígitos é.
- Troque a regex
^[0-9]{44}$por uma que aceite letras maiúsculas nas posições do CNPJ. - Confira leitores de código de barras e campos de busca que filtram tudo que não é número.
O que a validação confere
- Tamanho: 44 posições, depois de tirar os espaços.
- Dígito verificador da chave.
- Código de UF existente.
- Mês entre 01 e 12.
- Modelo 55 ou 65.
- Letras só nas posições do CNPJ do emitente (posições 7 a 18).
A validação não confere os dígitos verificadores do CNPJ que está dentro da chave (há séries especiais de emitente), não diz se a nota existe, se foi autorizada ou cancelada, nem quem é o destinatário. Isso só o portal oficial mostra, e as chaves geradas aqui não aparecem nele.
Onde usar chaves fictícias
Sistemas que recebem nota de fornecedor, conferem entrada de mercadoria, importam XML ou guardam o DANFE têm um campo de chave. Para testar leitura, máscara, busca e armazenamento, você precisa de chaves bem formadas que não sejam de notas reais de clientes.
Para um cenário fiscal completo, use o mesmo CNPJ do gerador de CNPJ e uma inscrição estadual da mesma UF. Para testar a autorização de uma nota, o caminho é outro: o ambiente de homologação da Sefaz.
Cuidados legais
As chaves são montadas no seu navegador com dados sorteados e não correspondem a nenhuma nota autorizada. Elas servem para testar software.
Nota fiscal é documento fiscal. Usar uma chave inventada para simular uma compra, justificar uma despesa ou enganar alguém pode configurar crime, como falsidade ideológica (art. 299 do Código Penal).
Código pronto para o seu projeto
// Dígito verificador a partir das 43 primeiras posições.
// charCodeAt - 48 serve para dígitos e para as letras do CNPJ alfanumérico.
function dvChave(chave43) {
let soma = 0;
let peso = 2;
for (let i = 42; i >= 0; i--) {
soma += (chave43.charCodeAt(i) - 48) * peso;
peso = peso === 9 ? 2 : peso + 1;
}
const resto = soma % 11;
return resto < 2 ? 0 : 11 - resto;
}
// Separa os campos e diz se o dígito confere.
function decomporChave(entrada) {
const c = String(entrada).replace(/\s/g, '').toUpperCase();
if (!/^\d{6}[0-9A-Z]{12}\d{26}$/.test(c)) return null;
return {
cUF: c.slice(0, 2),
ano: '20' + c.slice(2, 4),
mes: c.slice(4, 6),
cnpj: c.slice(6, 20),
modelo: c.slice(20, 22),
serie: c.slice(22, 25),
numero: c.slice(25, 34),
tipoEmissao: c.slice(34, 35),
codigoNumerico: c.slice(35, 43),
dv: c.slice(43),
dvConfere: dvChave(c.slice(0, 43)) === Number(c[43]),
};
}
decomporChave('3526 1111 2223 3300 0181 5500 1000 0001 2311 2345 6787').dvConfere; // true
decomporChave('35261112ABC34501DE35550010000001231123456788').cnpj; // '12ABC34501DE35' def dv_chave(chave43: str) -> int:
soma, peso = 0, 2
for c in reversed(chave43):
soma += (ord(c) - 48) * peso
peso = 2 if peso == 9 else peso + 1
resto = soma % 11
return 0 if resto < 2 else 11 - resto
def montar_chave(cuf: int, ano: int, mes: int, cnpj: str, modelo: int,
serie: int, numero: int, tipo_emissao: int, codigo: int) -> str:
"""Monta a chave de 44 posições a partir dos campos da nota de teste."""
chave43 = (
f"{cuf:02d}{ano % 100:02d}{mes:02d}{cnpj}{modelo:02d}"
f"{serie:03d}{numero:09d}{tipo_emissao}{codigo:08d}"
)
return chave43 + str(dv_chave(chave43))
chave = montar_chave(35, 2026, 11, "11222333000181", 55, 1, 123, 1, 12345678)
assert chave == "35261111222333000181550010000001231123456787" -- Chave como texto de 44 caracteres e uma visão com os campos separados.
CREATE TABLE notas_teste (
chave CHAR(44) PRIMARY KEY CHECK (chave ~ '^\d{6}[0-9A-Z]{12}\d{26}$')
);
CREATE VIEW notas_teste_campos AS
SELECT chave,
substr(chave, 1, 2) AS cuf,
substr(chave, 3, 4) AS aamm,
substr(chave, 7, 14) AS cnpj_emitente,
substr(chave, 21, 2) AS modelo,
substr(chave, 23, 3) AS serie,
substr(chave, 26, 9) AS numero,
substr(chave, 35, 1) AS tipo_emissao,
substr(chave, 36, 8) AS codigo_numerico,
substr(chave, 44, 1) AS dv
FROM notas_teste;
INSERT INTO notas_teste (chave) VALUES ('35261111222333000181550010000001231123456787'); Perguntas frequentes
O que é a chave de acesso da NF-e?
É um código de 44 posições que identifica uma nota fiscal eletrônica. Ele reúne a UF, o ano e o mês de emissão, o CNPJ do emitente, o modelo, a série, o número da nota, o tipo de emissão, um código numérico e um dígito verificador.
Onde ver os dados de uma nota de verdade pela chave?
Só no Portal Nacional da NF-e ou no site da Sefaz do estado. Aqui você confere o dígito e separa os campos da chave; a página não busca a nota em nenhum cadastro.
A chave gerada aqui é de uma nota de verdade?
Não. Ela é montada com dados sorteados e só segue a regra de formação. Não existe nota autorizada com essa chave, e o portal oficial não a encontra. Serve para teste de software.
Como calcular o dígito verificador da chave de acesso?
Multiplique as 43 primeiras posições, da direita para a esquerda, pelos pesos 2 a 9, repetindo a sequência. Some e pegue o resto da divisão por 11. Resto 0 ou 1 dá dígito 0. Nos outros casos, o dígito é 11 menos o resto.
Como descobrir o CNPJ do emitente pela chave?
O CNPJ do emitente fica nas posições 7 a 20 da chave. Cole a chave no painel e a página mostra o campo já separado.
A chave de acesso pode ter letras?
Pode, nas posições do CNPJ, quando o emitente tem CNPJ alfanumérico. As outras posições continuam numéricas, e o dígito verificador é calculado com cada caractere valendo o código ASCII menos 48.
Leia também
Veja também
Gerador de CNPJ
Numérico ou alfanumérico, de 1 a 10.000, em CSV, JSON ou SQL.
13.712.274/0001-55CNPJ alfanumérico
O formato novo, com letras, em uso desde jul/2026. Gere, valide e veja a conta.
12.ABC.345/01DE-35Inscrição estadual
Inscrições fictícias das 27 UFs, cada uma com a regra do seu estado.
137.122.740.715Massa de teste
Vários tipos de número num arquivo só, uma coluna por tipo, até 10.000 linhas.
cnpj,cpf,pisAtualizado em 14/11/2026.