qrCode da NFC-e: versões, parâmetros e conferência da URL
<qrCode>nfeProc › NFe › infNFeSupl › qrCodeRevisão editorial em 14 de out. de 2026. As versões e condições das regras estão indicadas ao longo do artigo.
qrCode contém o texto da URL representada pelo QR-Code no DANFE NFC-e. A imagem representa esse texto; o XML guarda a URL, sem pixels ou Base64 de imagem. Para investigar um erro, decodifique a imagem e compare o texto com os dados da nota e a regra da versão utilizada.
Caminho desta página: /nfeProc/NFe/infNFeSupl/qrCode. O prefixo nfeProc identifica a nota processada. infNFeSupl é filho de NFe, irmão de infNFe, e fica fora deste último grupo.
Versão 3: online e contingência têm formatos diferentes
A NT 2025.001 v1.03 corrigida descreve a versão 3 online como endereço oficial de consulta seguido de ?p= e três parâmetros separados por |: chave de acesso, versão 3 e tipo de ambiente. Na forma offline (tpEmis=9), acrescenta dia da emissão, valor total, tipo de identificação do destinatário, identificador do destinatário e assinatura.
O controle criptográfico próprio da versão 3 é documentado para a contingência. A assinatura não deve ser acrescentada ao formato online. ZX02-330/445 e ZX02-334/474 distinguem assinatura indevida online e ausente offline; ZX02-338/583 trata assinatura offline divergente. Ler a chave com sucesso não verifica a assinatura. NT 2025.001 v1.03, p. 13–14.
Versão 2 e CSC não devem ser misturados com v3
Na versão 2, a URL online inclui identificador de CSC e hash; na offline inclui também dia, total e digVal. Na versão 3, esses parâmetros de CSC deixam de compor o formato, e a assinatura offline tem outra função. A NT descreve eliminação futura do CSC sem data definida: não se deve afirmar que toda emissão v2 ou credencial CSC já foi abolida.
A mesma NT trata a versão 3 para emitente pessoa física rural e documenta condição própria para o Paraná. Para CNPJ, descreve a opção de adotar o novo leiaute. O XSD conter padrões v1, v2 e v3 não prova que uma versão legada seja aceita pela regra de negócio atual. Confira emitente, UF, modelo, ambiente e versão efetivamente gerada. NT v1.03, p. 5 e 11.
Vetor público oficial para leitura da forma XML
O exemplo abaixo é transcrito, sem alterar chave ou parâmetros, do vetor legado versão 100 da NT 2025.001 v1.03 corrigida, p. 14. É um exemplo público de homologação (tpAmb=2), usado somente para demonstrar a URL como texto XML; não é uma receita de geração atual, nota de cliente ou prova de autorização. A versão 100 está sujeita às restrições temporais da ZX02-15/903.
<qrCode xmlns="http://www.portalfiscal.inf.br/nfe"><![CDATA[https://www.sefaz.rs.gov.br/NFCE/NFCECOM.aspx?chNFe=43150108287693000157651010000000971000001251&nVersao=100&tpAmb=2&cDest=99999999000191&dhEmi=323031352d30312d32305431373a30303a34392d30323a3030&vNF=1.00&vICMS=0.00&digVal=2f4a703477714e6d6e4e646d31776b64743936655a486b65354f513d&cIdToken=000001&cHashQRCode=ecc4f0e7e612456f2e3521768bd572b6f0eae240]]></qrCode>
O fragmento é parcial, sem XML completo da nota. CDATA preserva os & do literal legado; os formatos 2 e 3, que usam |, não exigem CDATA segundo a NT. Em produção, os parâmetros devem ser gerados a partir do documento real, sem copiar a chave deste exemplo.
Como conferir parâmetros e mensagens
Nas versões 2 e 3, chave é o primeiro parâmetro, versão o segundo e tipo de ambiente o terceiro. ZX02-228/397 compara a chave do QR com a chave da nota; ZX02-244/397 compara o ambiente com ide/tpAmb. ZX02-236/398 trata versão divergente do previsto. Parâmetro ausente está vinculado a 396 nas regras específicas correspondentes; não se confunde com a mesma informação presente, porém divergente.
Na contingência, compare dia e valor total com dhEmi e vNF; ZX02-268 e ZX02-276 tratam essas divergências. Para assinatura offline v3, confronte o conteúdo exato assinado e o certificado pertinente conforme o procedimento oficial, sem substituir por hash CSC da v2. A mensagem completa informa qual parâmetro investigar; um código isolado pode agrupar verificações diferentes.
Como montar e conferir a assinatura offline v3
Na versão 3 offline, o dia da emissão tem exatamente dois dígitos; o valor total usa ponto decimal, sem separador de milhar ou sinais. O tipo de identificação é 1 para CNPJ, 2 para CPF e 3 para identificação de estrangeiro. Se o destinatário não foi identificado, mantenha vazio o parâmetro de tipo. O parâmetro seguinte contém CNPJ ou CPF quando informado; para estrangeiro ou destinatário não identificado, ele permanece vazio. Os separadores | das posições vazias são preservados.
A assinatura é feita sobre a concatenação dos parâmetros de 1 a 7, mantendo os separadores. O Manual v6.0 determina RSA com SHA-1, resultado em Base64 e o mesmo certificado digital que assina a NFC-e. Depois, acrescente o resultado como oitavo parâmetro, separado por |. Isso difere tanto do hash CSC da v2 quanto da assinatura avançada do vínculo PAA: não são credenciais ou mensagens intercambiáveis.
Para investigar a mensagem 583, reconstrua a cadeia original dos sete parâmetros e compare os bytes efetivamente assinados, inclusive posições vazias, dia com zero inicial e valor serializado. Confira o certificado correspondente à nota. Não registre sua chave privada em logs e não substitua a assinatura por um texto Base64 escolhido manualmente. A conferência pode verificar a assinatura com a chave pública apropriada, sem divulgar o material privado. Manual v6.0, tabela 7, p. 30.
Cronograma da v3 e o caso do produtor rural
A NT 2025.001 v1.03 corrigida preserva o cronograma da etapa inicial até 02/06/2025 em teste e até 01/09/2025 em produção. O histórico da revisão v1.01, preservado na v1.03 corrigida, remove a regra ZX02-220/407 de restrição da v3 por UF, considerando a disponibilização do novo leiaute pelas unidades federadas. Por isso, a mensagem 407 rasurada não deve ser apresentada como validação vigente dessa revisão.
Para emitente pessoa física produtor rural, a NT e o Manual v6.0 apresentam a orientação de adoção da v3 com a ressalva do Paraná; ZX02-222/444 trata QR versão 2 com emitente identificado por CPF. Confira a situação da UF e a identificação do emitente antes de transportar uma regra para outro cenário. Para CNPJ, os documentos descrevem a opção de adotar a v3. Esses fatos não permitem afirmar que toda emissão v2 esteja proibida ou que o CSC já tenha sido abolido em qualquer contexto.
As datas publicadas são o cronograma técnico, distinto da situação operacional de uma emissão concreta. O adiamento de outras NTs comunicado em 05/10/2026 não redefine automaticamente essa etapa de 2025. NT 2025.001 v1.03 corrigida, p. 2–3, 5 e 11 e Manual v6.0, p. 29.
Quando o texto está certo e a imagem não é lida
Se a URL do XML e a URL que deveria estar na imagem coincidem, examine também a geração e a impressão. O Manual v6.0 define dimensões mínimas de 25 mm por 25 mm, nível de correção M e codificação UTF-8 para a imagem do QR da NFC-e. Esses parâmetros de imagem são diferentes do limite textual de 60 a 1.000 caracteres de qrCode no XSD.
Compare a imagem digital com a impressão final, verificando cortes e redimensionamentos que afetem a leitura. Uma dificuldade de leitura física não autoriza mudar chave, valor ou assinatura. Primeiro preserve os parâmetros verdadeiros e corrija a geração ou impressão comprovadamente incorreta. A URL base deve vir da relação oficial por UF e ambiente; o Manual permite que uma UF use a mesma base nos dois ambientes, distinguindo-os pelo parâmetro tpAmb. Bases iguais não dispensam a conferência desse parâmetro. Manual v6.0, p. 28 e 31.
Diagnóstico da imagem ao XML original
Primeiro decodifique o QR impresso e compare a URL com infNFeSupl/qrCode. Se os textos diferem, investigue gerador de imagem, cache e documento usado na impressão. Se coincidem, separe endereço oficial e parâmetros, preservando maiúsculas, minúsculas e todos os separadores.
Depois confira UF, ambiente, chave, versão e forma de emissão no XML. Se a consulta não encontra a nota, confirme o endpoint, o ambiente e a situação pelo serviço apropriado antes de concluir que ela foi rejeitada. A existência do QR também não comprova autorização, especialmente em contingência offline. Corrija a causa comprovada na origem, preservando o documento fiscal e seu estado.
Fontes oficiais
- Leiaute NF-e/NFC-e — PL_010f_v1.04: infNFeSupl/qrCode, linhas 6647–6668; padrões de versões 1, 2 e 3
- NT 2025.001 — QR-Code e simplificação operacional — 1.03 corrigida, setembro/2025: Cronograma e revisões, p. 2–3; adoção v3, p. 5; validações e formatos, p. 11–14; vetor público histórico versão 100, p. 14.
- Manual de Padrões Técnicos do DANFE NFC-e e QR-Code — 6.0, março/2025: Seção 4.4 e tabela 6, p. 28–29; tabela 7, p. 30; configuração da imagem, p. 31; consulta por chave, p. 34.
Referência técnica para integração
- XPath completo
/nfeProc/NFe/infNFeSupl/qrCode- Namespace
http://www.portalfiscal.inf.br/nfe- Leiaute
- 4.00 · PL_010e_v1.02
- Ocorrências no XSD
- 1–1 no contexto do elemento pai
- Tipo
- inline:xs:string · string
- Preenchimento no catálogo
- Condicional
A ocorrência vale dentro da estrutura XML: um campo obrigatório em um grupo opcional não torna esse grupo obrigatório. A aplicação fiscal depende da operação e da versão da regra.
- maxLength
1000- minLength
60- pattern
((HTTPS?|https?)://.*\?chNFe=[0-9]{6}[0-9A-Z]{12}[0-9]{26}&nVersao=100&tpAmb=[1-2](&cDest=([A-Za-z0-9.:+-/)(]{0}|[A-Za-z0-9.:+-/)(]{5,20})?)?&dhEmi=[A-Fa-f0-9]{50}&vNF=(0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?)&vICMS=(0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?)&digVal=[A-Fa-f0-9]{56}&cIdToken=[0-9]{6}&cHashQRCode=[A-Fa-f0-9]{40})- pattern
((HTTPS?|https?)://.*\?p=([0-9]{6}[0-9A-Z]{12}[0-9]{16}(1|3|4)[0-9]{9})\|[2]\|[1-2]\|(0|[1-9]{1}([0-9]{1,5})?)\|[A-Fa-f0-9]{40})- pattern
((HTTPS?|https?)://.*\?p=([0-9]{6}[0-9A-Z]{12}[0-9]{16}(1|3|4)[0-9]{9})\|[3]\|[1-2])- pattern
((HTTPS?|https?)://.*\?p=([0-9]{6}[0-9A-Z]{12}[0-9]{16}(9)[0-9]{9})\|[3]\|[1-2]\|([0]{1}[1-9]{1}|[1-2]{1}[0-9]{1}|[3]{1}[0-1]{1})\|(0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?)\|((1|2|3)?)\|((([0-9A-Z]{12}[0-9]{2})|([0-9]{11}))?)\|([a-zA-Z0-9+/]+[=]{0,2}))- pattern
((HTTPS?|https?)://.*\?p=([0-9]{6}[0-9A-Z]{12}[0-9]{16}9[0-9]{9})\|[2]\|[1-2]\|([0]{1}[1-9]{1}|[1-2]{1}[0-9]{1}|[3]{1}[0-1]{1})\|(0|0\.[0-9]{2}|[1-9]{1}[0-9]{0,12}(\.[0-9]{2})?)\|[A-Fa-f0-9]{56}\|(0|[1-9]{1}([0-9]{1,5})?)\|[A-Fa-f0-9]{40})- whiteSpace
preserve