Regex de chave de acesso da NF-e (44 dígitos)
Regex para a chave de acesso de NF-e e outros documentos fiscais eletrônicos: 44 dígitos, juntos ou em 11 grupos de 4 separados por espaço.
O padrão
\d{44}|(?:\d{4} ){10}\d{4}
Flags: nenhuma. Sem âncoras: para validar um campo inteiro use ^(?:padrão)$.
Teste na hora
| Linha | Resultado |
|---|
Tudo roda no seu navegador; nada do que você digita é enviado.
Exemplos
Casam
352601112223330001815500100000123411234567883526 0111 2223 3300 0181 5500 1000 0012 3411 2345 6788312611123456780001005500200000098718765432173126 1112 3456 7800 0100 5500 2000 0009 8718 7654 3217
Não casam
352601112223330001815500100000123411234567835260111222333000181550010000012341123456788035260111222333000181X500100000123411234567883526 0111 2223 3300 0181 5500 1000 0012 3411 2345 6788NFe35260111222333000181550010000012341123456788
Como funciona, por partes
\d{44}: Primeira forma: quarenta e quatro dígitos seguidos, como a chave costuma aparecer em XML, sistemas e códigos de barras.(?:\d{4} ){10}: Segunda forma: dez grupos de quatro dígitos, cada um seguido de um espaço. É como a chave aparece impressa no DANFE.\d{4}: O último grupo de quatro dígitos, sem espaço depois, fechando os 44 dígitos (11 grupos de 4).Estrutura interna: Os 44 dígitos têm partes com significado: UF, ano e mês, CNPJ do emitente, modelo, série, número, tipo de emissão, código numérico e dígito verificador. O regex não olha esses campos.Sem separadores mistos: Ou tudo junto ou tudo agrupado por espaços. Uma chave com alguns grupos colados e outros separados é recusada.
Armadilhas
- Quarenta e quatro dígitos não garantem uma chave válida. O último dígito é verificador, calculado pelo módulo 11 sobre os 43 anteriores; o regex não faz essa conta, a ferramenta de decodificação faz.
- Uma chave com dígito correto ainda pode não corresponder a nenhuma nota autorizada. Só a consulta à Secretaria da Fazenda mostra se a nota existe e qual é a situação dela.
- Muitos sistemas colam a chave com o prefixo NFe, usado como identificador no XML. Remova o prefixo antes de aplicar o padrão, que espera apenas dígitos.
- Guarde a chave sempre como texto. Como número, a chave estoura a precisão de inteiros em várias linguagens e perde zeros à esquerda.
Código pronto
JavaScript
const re = new RegExp("^(?:\\d{44}|(?:\\d{4} ){10}\\d{4})$");
console.log(re.test(texto.trim()));
Python
import re
re_chave_nfe_44_digitos = re.compile(r"[0-9]{44}|(?:[0-9]{4} ){10}[0-9]{4}")
print(bool(re_chave_nfe_44_digitos.fullmatch(texto.strip())))
C#
using System.Text.RegularExpressions;
var re = new Regex(@"^(?:[0-9]{44}|(?:[0-9]{4} ){10}[0-9]{4})\z");
bool ok = re.IsMatch(texto.Trim());
Perguntas frequentes
Esse regex serve para CT-e e MDF-e?
Serve para o formato, porque esses documentos também usam chave de 44 dígitos. O significado de cada parte muda conforme o modelo, e isso o regex não distingue.
Como ler os campos da chave?
Cortando as posições conhecidas: por exemplo, os dois primeiros dígitos são o código da UF e os quatro seguintes, o ano e o mês de emissão. A ferramenta de decodificação do Me Ajuda Flow faz isso e confere o dígito verificador.
As chaves dos exemplos são de notas reais?
Não. Foram montadas com valores fictícios e o dígito verificador calculado. Não correspondem a notas emitidas e usam um CNPJ de teste gerado por cálculo.