Pular para o conteúdo
FiscalAPI
NF-e

Chave de acesso inválida: deve ter 44 caracteres. Como resolver

Equipe FiscalAPI 5 min de leitura
NF-eChave de AcessoSEFAZTutorial

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çãoTamanhoConteúdo
1 a 22Código IBGE da UF do emitente (35 = SP, 51 = MT...)
3 a 64Ano e mês de emissão (AAMM)
7 a 2014CNPJ do emitente, ou CPF com zeros à esquerda
21 a 222Modelo: 55 = NF-e, 65 = NFC-e
23 a 253Série
26 a 349Número da nota
351Forma de emissão (1 = normal; outros valores = contingência)
36 a 438Código numérico aleatório (cNF)
441Dí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:

  1. Multiplique cada caractere pelos pesos 2, 3, 4, 5, 6, 7, 8, 9, 2, 3... começando da direita.
  2. Some tudo e divida por 11.
  3. 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:

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:

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ódigoMotivo
236Dígito verificador inválido
614Código da UF inválido
615Ano menor que 06 ou maior que o ano corrente
616Mês menor que 1 ou maior que 12
617CNPJ ou CPF zerado ou com dígito inválido
618Modelo diferente de 55 e 65
619Número da nota igual a zero
562Có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#

Artigos relacionados#

Compartilhar: WhatsApp LinkedIn Twitter

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 →