Chave de acesso da NFS-e: os 50 dígitos, campo a campo (com cálculo do DV)
A chave de acesso da NFS-e do padrão nacional tem 50 dígitos, em 8 campos: código IBGE do município emissor (7), ambiente gerador (1), tipo de inscrição do emitente (1), CPF ou CNPJ do emitente (14), número da NFS-e (13), ano e mês de emissão (4), código numérico (9) e dígito verificador (1). O cálculo do dígito verificador é o módulo 11 (o mesmo da NF-e), com pesos de 2 a 9 sobre os 49 primeiros dígitos, e segue o guia oficial. Com ele, dá para recusar uma chave digitada errada antes de qualquer consulta.
Atualizado em 8 de novembro de 2026.
Os 50 dígitos, campo a campo
A chave usada nos exemplos é fictícia, com dígito verificador válido: 35503082211222333000181000000000012326100000045676.
| Posição | Tamanho | Campo | No exemplo |
|---|---|---|---|
| 1 a 7 | 7 | Código IBGE do município emissor | 3550308 (São Paulo) |
| 8 | 1 | Ambiente gerador: 1 = sistema próprio do município, 2 = Sefin Nacional NFS-e | 2 |
| 9 | 1 | Tipo de inscrição do emitente: 1 = CPF, 2 = CNPJ | 2 |
| 10 a 23 | 14 | CPF ou CNPJ do emitente (CPF com zeros à esquerda) | 11222333000181 |
| 24 a 36 | 13 | Número da NFS-e, com zeros à esquerda | 0000000000123 |
| 37 a 40 | 4 | Ano e mês de emissão (AAMM) | 2610 (outubro de 2026) |
| 41 a 49 | 9 | Código numérico gerado pelo sistema | 000004567 |
| 50 | 1 | Dígito verificador | 6 |
O significado de cada campo está no guia oficial do Emissor Público Nacional. Só pela chave você já sabe a cidade que emitiu, quem emitiu, o número da nota e o mês.
Chave da NFS-e x chave da NF-e
| NFS-e (serviço) | NF-e (produto) | |
|---|---|---|
| Tamanho | 50 dígitos | 44 dígitos |
| Começa com | Código IBGE do município (7 dígitos) | Código da UF (2 dígitos) |
| Data na chave | AAMM | AAMM |
| Identificador no XML | Id = NFS + 50 dígitos (53 caracteres) | Id = NFe + 44 dígitos |
| No documento impresso | DANFSe, bloco único de 50 dígitos | DANFE, 11 blocos de 4 dígitos |
Se o seu sistema tem um campo "chave de acesso" só para NF-e, ele vai cortar ou recusar a chave da NFS-e. Confira o tamanho do campo antes de importar notas de serviço. Para a chave de 44 dígitos, veja chave de acesso inválida: deve ter 44 caracteres.
Como calcular o dígito verificador
O cálculo é o módulo 11 (o mesmo da NF-e) e segue o guia oficial:
- Pegue os 49 primeiros dígitos.
- Da direita para a esquerda, multiplique cada dígito por um peso: 2, 3, 4, 5, 6, 7, 8, 9, e volte para 2.
- Some os produtos e divida por 11.
- Se o resto for 0 ou 1, o DV é 0. Senão, o DV é 11 menos o resto.
No exemplo, o resto é 5. O DV é 11 − 5 = 6, o último dígito da chave.
Em Python
import re
def dv_chave_nfse(chave49: str) -> int:
soma, peso = 0, 2
for digito in reversed(chave49):
soma += int(digito) * peso
peso = 2 if peso == 9 else peso + 1
resto = soma % 11
return 0 if resto < 2 else 11 - resto
def chave_nfse_valida(chave: str) -> bool:
# aceita a chave com espaços, pontos, traços ou o prefixo NFS do XML
chave = re.sub(r"[\s.\-/]", "", chave).upper()
if not re.fullmatch(r"(NFS)?\d{50}", chave):
return False # tamanho errado ou letra no meio
chave = chave[-50:]
return dv_chave_nfse(chave[:49]) == int(chave[49])
print(chave_nfse_valida("35503082211222333000181000000000012326100000045676")) # True Em JavaScript
function dvChaveNfse(chave49) {
let soma = 0;
let peso = 2;
for (let i = chave49.length - 1; i >= 0; i--) {
soma += Number(chave49[i]) * peso;
peso = peso === 9 ? 2 : peso + 1;
}
const resto = soma % 11;
return resto < 2 ? 0 : 11 - resto;
}
function chaveNfseValida(chave) {
const limpa = chave.replace(/[\s.\-\/]/g, "").toUpperCase();
if (!/^(NFS)?\d{50}$/.test(limpa)) return false; // tamanho errado ou letra no meio
const so = limpa.slice(-50);
return dvChaveNfse(so.slice(0, 49)) === Number(so[49]);
}
console.log(chaveNfseValida("35503082211222333000181000000000012326100000045676")); // true Separar os campos
def decompor_chave_nfse(chave: str) -> dict:
return {
"municipio_ibge": chave[0:7],
"ambiente_gerador": chave[7],
"tipo_inscricao": chave[8], # 1 = CPF, 2 = CNPJ
"cpf_cnpj": chave[9:23],
"numero_nfse": int(chave[23:36]),
"ano_mes": chave[36:40], # AAMM
"codigo_numerico": chave[40:49],
"dv": chave[49],
} Erros comuns com a chave
| Sintoma | Causa provável | O que fazer |
|---|---|---|
| A chave tem 44 dígitos | É uma NF-e, não NFS-e | Use a consulta de NF-e |
| A chave tem 53 caracteres e começa com NFS | Foi copiada do Id do XML | Tire as 3 letras do começo |
| 49 ou 51 dígitos | Faltou ou sobrou um dígito ao copiar | Copie de novo do DANFSe ou do XML |
| 50 dígitos, DV não confere | Um dígito trocado no meio | Confira dígito a dígito ou copie de novo |
| Chave válida, nota não aparece | Nota fora do padrão nacional ou de outro ambiente | Confira no portal da prefeitura do prestador |
Uma chave com DV certo garante só que ela foi digitada sem erro. Não garante que a nota existe. Para isso, é preciso consultar a nota.
Chave da NFS-e x identificador da DPS
A DPS (Declaração de Prestação de Serviço) é o documento que o prestador envia para gerar a NFS-e. O identificador da DPS não é a chave da nota. Ele tem município (7), tipo de inscrição (1), CPF ou CNPJ (14), série (5) e número da DPS (15), conforme o guia das APIs do Emissor Público Nacional. Se alguém te passou um número que mistura série e número da DPS, ele não serve como chave de acesso.
Validar e consultar pela API da FiscalAPI
A API da FiscalAPI valida a chave antes de cobrar: tamanho, só números e dígito verificador. Ela aceita a chave com espaços, pontos ou traços e com o prefixo NFS do XML. Chave inválida volta 400 CHAVE_INVALIDA, com o motivo, e não é cobrada.
import requests
resp = requests.get(
"https://api.fiscalapi.com.br/api/consultar-nfse",
headers={"X-API-Key": "fapi_sua_chave_aqui"},
params={"chave": "NFS35503082211222333000181000000000012326100000045676"},
timeout=100,
)
if resp.status_code == 400:
print("Chave inválida:", resp.json()) # não é cobrada
elif resp.status_code == 404:
print("Nota não encontrada no padrão nacional") # não é cobrada
elif resp.ok:
nota = resp.json()
print(nota["numero_nfse"], nota["situacao"]["descricao"])
else:
print("Tente de novo:", resp.status_code, resp.json()) Com a chave válida, a resposta traz emitente, tomador, serviço, ISS, tributos federais e o tipo de geração da nota, em JSON. Com danfse=true, vem também o PDF do DANFSe. Custa de R$ 0,05 (Enterprise) a R$ 2,01 (Lite) por nota entregue. Sem programar, a mesma consulta sai no painel da FiscalAPI. Detalhes na documentação da consulta de NFS-e.
Perguntas frequentes
Quantos dígitos tem a chave de acesso da NFS-e? 50. A da NF-e tem 44.
Onde fica a chave no XML da NFS-e? No atributo Id da NFS-e, depois do prefixo NFS. Tire as 3 letras e sobram os 50 dígitos.
O que significa o 8º dígito da chave? É o ambiente gerador: 1 para nota gerada pelo sistema próprio do município, 2 para nota gerada pela Sefin Nacional NFS-e.
Dá para saber o CNPJ do prestador pela chave? Sim. Ele está nas posições 10 a 23. A posição 9 diz se é CPF (1) ou CNPJ (2).
DV válido quer dizer que a nota existe? Não. Quer dizer só que a chave não tem erro de digitação. Para saber se a nota existe, consulte a chave. Veja como consultar uma NFS-e pela chave de acesso.
Fontes
- Guia do Emissor Público Nacional Web, v1.2.1, seção 9.1 (composição da chave de acesso), gov.br/nfse
- Nota Técnica nº 008/2026, especificações do DANFSe, item 2.1.1 (chave em bloco único de 50 dígitos)
- Guia das APIs do Emissor Público Nacional, item 1.4 (identificador da DPS)
- Consulta de NFS-e pela chave, documentação da FiscalAPI
Artigos relacionados
- Como consultar uma NFS-e pela chave de acesso
- DANFSe: o que é e como baixar o PDF da NFS-e
- Chave de acesso inválida: deve ter 44 caracteres (NF-e)
Precisa validar e consultar chaves de NFS-e no seu sistema? Veja a consulta de NFS-e pela chave ou crie sua conta.
Consulte a NFS-e só com a chave
Dados em JSON e o DANFSe em PDF, sem certificado. A partir de R$ 0,05 por nota.
Ver a consulta de NFS-e