Chave de acesso inválida: deve ter 44 caracteres. Como resolver
A mensagem "chave de acesso inválida, a chave deve ter 44 caracteres" aparece quando o que foi colado não tem exatamente 44 caracteres depois de tirar espaços e pontos. Copie a chave de novo do XML (tag chNFe) ou do DANFE, sem cortar blocos. Se ela veio de uma planilha, o Excel provavelmente a estragou: formate a coluna como Texto e cole de novo. Se tem 44 e mesmo assim é recusada, confira o dígito verificador e o modelo.
Como a chave de 44 caracteres é formada#
| Posição | Tamanho | Conteúdo |
|---|---|---|
| 1 a 2 | 2 | Código IBGE da UF do emitente (35 = SP, 51 = MT...) |
| 3 a 6 | 4 | Ano e mês de emissão (AAMM) |
| 7 a 20 | 14 | CNPJ do emitente, ou CPF com zeros à esquerda |
| 21 a 22 | 2 | Modelo: 55 = NF-e, 65 = NFC-e |
| 23 a 25 | 3 | Série |
| 26 a 34 | 9 | Número da nota |
| 35 | 1 | Forma de emissão (1 = normal; outros valores = contingência) |
| 36 a 43 | 8 | Código numérico aleatório (cNF) |
| 44 | 1 | Dígito verificador (DV) |
No DANFE ela aparece em 11 blocos de 4 dígitos. Espaços e pontos não contam.
Causas mais comuns#
- Excel. Colada numa célula com formato Geral, a chave vira número. O Excel guarda só 15 dígitos significativos e mostra algo como
3,52609E+43. Os dígitos finais viram zero e não voltam. Formate a coluna como Texto antes de colar, ou importe o arquivo marcando a coluna como texto. - Bloco perdido. Ao copiar do PDF, a quebra de linha corta um bloco ou junta um caractere a mais.
- Número errado. O número do protocolo (15 dígitos) ou o número da nota foram colados no lugar da chave.
- Leitura do código de barras. Leitor mal configurado ou imagem ruim troca ou omite dígitos.
- Letras removidas. Com o CNPJ alfanumérico, que entrou em produção nos documentos fiscais em julho de 2026, a chave de uma empresa com CNPJ novo pode ter letras nas posições 7 a 18. Validador que apaga tudo que não é número deixa essa chave com menos de 44 caracteres.
Como conferir o dígito verificador#
O último caractere é calculado a partir dos 43 anteriores, por módulo 11:
- Multiplique cada caractere pelos pesos 2, 3, 4, 5, 6, 7, 8, 9, 2, 3... começando da direita.
- Some tudo e divida por 11.
- Se o resto for 0 ou 1, o DV é 0. Senão, o DV é 11 menos o resto.
O MOC traz um exemplo resolvido: soma 644, resto 6, DV 5. Com o CNPJ alfanumérico, cada letra entra no cálculo pelo código ASCII menos 48 (A = 17, B = 18...); os números continuam valendo o próprio dígito.
Em Python:
import re
def dv_chave(chave43: str) -> int:
soma, peso = 0, 2
for c in reversed(chave43):
soma += (ord(c) - 48) * peso # letra: ASCII - 48
peso = 2 if peso == 9 else peso + 1
resto = soma % 11
return 0 if resto < 2 else 11 - resto
def validar_chave(texto: str) -> str | None:
"""None se a chave está bem formada; senão, o motivo."""
chave = re.sub(r"[^0-9A-Za-z]", "", texto).upper()
if len(chave) != 44:
return f"tem {len(chave)} caracteres, precisa de 44"
if not re.fullmatch(r"[0-9]{6}[A-Z0-9]{12}[0-9]{26}", chave):
return "letra fora das posições 7 a 18"
if chave[20:22] not in ("55", "65"):
return f"modelo {chave[20:22]}: não é NF-e nem NFC-e"
if dv_chave(chave[:43]) != int(chave[43]):
return "dígito verificador não confere"
return None Em JavaScript:
function dvChave(chave43) {
let soma = 0, peso = 2;
for (let i = chave43.length - 1; i >= 0; i--) {
soma += (chave43.charCodeAt(i) - 48) * peso; // letra: ASCII - 48
peso = peso === 9 ? 2 : peso + 1;
}
const resto = soma % 11;
return resto < 2 ? 0 : 11 - resto;
}
function validarChave(texto) {
const chave = texto.replace(/[^0-9A-Za-z]/g, "").toUpperCase();
if (chave.length !== 44) return `tem ${chave.length} caracteres, precisa de 44`;
if (!/^[0-9]{6}[A-Z0-9]{12}[0-9]{26}$/.test(chave)) return "letra fora das posições 7 a 18";
const modelo = chave.slice(20, 22);
if (modelo !== "55" && modelo !== "65") return `modelo ${modelo}: não é NF-e nem NFC-e`;
if (dvChave(chave.slice(0, 43)) !== Number(chave[43])) return "dígito verificador não confere";
return null; // chave bem formada
} Chave bem formada não quer dizer que a nota existe. Isso só a SEFAZ confirma.
Rejeições da SEFAZ ligadas à chave#
| Código | Motivo |
|---|---|
| 236 | Dígito verificador inválido |
| 614 | Código da UF inválido |
| 615 | Ano menor que 06 ou maior que o ano corrente |
| 616 | Mês menor que 1 ou maior que 12 |
| 617 | CNPJ ou CPF zerado ou com dígito inválido |
| 618 | Modelo diferente de 55 e 65 |
| 619 | Número da nota igual a zero |
| 562 | Código numérico da chave difere do da NF-e gravada |
Na FiscalAPI#
Na consulta de NF-e por chave, espaços e pontos são ignorados, então dá para colar a chave como está no DANFE. Hoje a consulta aceita chave numérica de 44 dígitos. Chave com tamanho errado volta com o erro CHAVE_INVALIDA antes de qualquer consulta, e nada é cobrado. Com a chave certa e o certificado de quem participa da nota, o XML completo sai em segundos. Veja os planos.
Perguntas frequentes#
Quantos dígitos tem a chave de acesso da NF-e? 44. Com o CNPJ alfanumérico, algumas posições podem ser letras, então o certo é falar em 44 caracteres.
Por que a chave da planilha termina em zeros? O Excel tratou a chave como número e guardou só 15 dígitos. Formate a coluna como Texto e copie a chave de novo da origem.
Chave com 44 caracteres e ainda inválida: o que é? Confira o dígito verificador com o cálculo acima. Se bater, veja se o modelo (posições 21 e 22) é o que o serviço aceita.
A chave de CT-e também tem 44 dígitos? Tem, com outro modelo (57). Serviço de NF-e recusa a chave de outro documento mesmo com o tamanho certo.
Fontes#
- MOC 7.0 Visão Geral, Portal da NF-e: composição da chave e cálculo do DV (itens 2.2.6.1 e 2.2.6.2), regras de validação da chave
- Nota Técnica Conjunta 2025.001, Portal da NF-e: CNPJ alfanumérico na chave de acesso
- Consultar NF-e por chave, documentação da FiscalAPI
Artigos relacionados#
Consulte dados fiscais via API
Consulte Inscrições Estaduais, CNPJs e Certidões Negativas via API REST. Dados direto da SEFAZ e Receita Federal. Planos a partir de R$ 19,99/mês.
Criar conta →