Ferramenta gratuita para programadores

Calculadora de hash e QR do Verifactu

Calcula o hash SHA-256 (a «huella») de um registo de alta, de anulação ou de evento exatamente como o define a AEAT (a autoridade tributária espanhola), encadeia-o com o registo seguinte e gera a URL e o código QR da fatura com as respetivas validações. Carrega os exemplos oficiais e confirma que o teu código dá o mesmo resultado.

  • Reproduz os 3 exemplos oficiais
  • Calculado no teu navegador
  • Sem criar conta

Ferramenta de testes baseada nos documentos técnicos publicados pela AEAT (hash v0.1.2 e QR v0.5.0). Não envia nada à Agência Tributária nem substitui as suas validações.

Hash do registo de faturação

Escolhe o tipo de registo, preenche os campos tal como vão no teu XML e calcula. Deixa o hash anterior vazio se for o primeiro registo do sistema.

Tipo de registo
Exemplos oficiais da AEAT:

Tal como vai na fatura, até 60 caracteres.

Formato DD-MM-AAAA, separado por hífenes.

Com ponto decimal. 123.1 e 123.10 valem o mesmo para a AEAT, mas o hash é calculado sobre o que escreveres.

64 caracteres hexadecimais em maiúsculas. Vai vazio (campo «Huella=») se for o primeiro registo.

ISO 8601 com segundos e fuso horário.

Tudo é calculado no teu navegador com a Web Crypto API. Não guardamos nem enviamos os dados que escreves.

URL e código QR da fatura

Gera a URL de verificação com a codificação correta, valida-a com as regras da AEAT e descarrega o QR pronto a imprimir.

Modalidade do sistema
Ambiente

Até 60 caracteres ASCII imprimíveis. Os «&», «/» ou espaços são codificados automaticamente.

Ponto decimal, até 12 algarismos inteiros e 2 casas decimais.

Validar uma URL de QR que já tens

Cola a URL que o teu programa imprime (ou a que um leitor de QR lê) e dizemos-te se a AEAT a vai aceitar.

Como funciona o hash do Verifactu

O que diz o documento técnico da AEAT, explicado para quem o tem de programar.

Que campos entram e por que ordem

O hash de um registo de alta calcula-se sobre oito campos do XML, por esta ordem: IDEmisorFactura, NumSerieFactura, FechaExpedicionFactura, TipoFactura, CuotaTotal, ImporteTotal, Huella (a do registo anterior) e FechaHoraHusoGenRegistro.

O registo de anulação usa cinco: IDEmisorFacturaAnulada, NumSerieFacturaAnulada, FechaExpedicionFacturaAnulada, Huella e FechaHoraHusoGenRegistro. O registo de evento, que só existe na modalidade NO VERI*FACTU, usa nove, começando pelos dados do sistema informático.

Como se constrói a cadeia

Cada campo escreve-se como nome=valor e os campos unem-se com &. Aos valores retiram-se os espaços do início e do fim. Se um campo não tiver valor, escreve-se só o nome e o sinal de igual: no primeiro registo do sistema, o hash anterior vai como Huella=. A cadeia é codificada em UTF-8 e aplica-se-lhe SHA-256; o resultado vai em hexadecimal e em maiúsculas, 64 caracteres.

IDEmisorFactura=89890001K&NumSerieFactura=12345678/G33&FechaExpedicionFactura=01-01-2024&TipoFactura=F1&CuotaTotal=12.35&ImporteTotal=123.45&Huella=&FechaHoraHusoGenRegistro=2024-01-01T19:20:30+01:00
→ 3C464DAF61ACB827C65FDA19F352A4E3BDC2C640E9E9FC4CC058073F38F12F60

Porque se encadeia

Cada registo leva o hash do anterior, por isso alterar uma fatura antiga parte todos os hashes posteriores. É por isso que a cadeia é por sistema e instalação, e que dois processos que faturam ao mesmo tempo têm de serializar o cálculo: se dois registos apanharem o mesmo hash anterior, a cadeia bifurca-se.

Na modalidade VERI*FACTU, a AEAT recalcula o hash de cada registo que recebe. Se não coincidir com o teu, o registo fica «Aceptado con errores» (aceite com erros).

E o QR

O QR da fatura contém uma URL do serviço de verificação (cotejo) da AEAT com quatro parâmetros: nif, numserie, fecha (DD-MM-AAAA, com hífenes) e importe (com ponto decimal). Os valores vão com URL encoding em UTF-8: um número de série como 12345678&G33 tem de viajar como 12345678%26G33.

O caminho muda conforme a modalidade: ValidarQR para VERI*FACTU e ValidarQRNoVerifactu para NO VERI*FACTU, em www2.agenciatributaria.gob.es (produção) ou prewww2.aeat.es (testes). O parâmetro opcional formato=json serve para integrações, mas nunca pode ir no QR impresso.

Testámo-lo a 7 de outubro de 2026 contra o serviço de verificação do ambiente de testes da AEAT: a URL que esta ferramenta gera com 12345678&G33 é aceite e a Agência lê bem o número de série, e um montante com vírgula devolve o mesmo erro 2005 que aqui te assinalamos.

Os erros que mais vemos na implementação

E que esta calculadora te ajuda a detetar antes da AEAT.

  1. Hash em minúsculas

    A maioria das bibliotecas devolve o hexadecimal em minúsculas. A AEAT quere-o em maiúsculas.

  2. Data de emissão em ISO

    No hash e no QR, a data de emissão vai como DD-MM-AAAA, não como AAAA-MM-DD. Já a data e hora do registo vai em ISO 8601 com fuso horário.

  3. Data e hora sem fuso horário

    2024-01-01T19:20:30 não serve: é preciso o fuso, +01:00 ou +02:00 conforme a época do ano, e +00:00 ou +01:00 nas Canárias.

  4. Vírgula decimal nos montantes

    Nem no hash nem no QR: sempre ponto. No QR, uma vírgula devolve o erro 2005.

  5. Esquecer «Huella=» no primeiro registo

    O campo vai mesmo que esteja vazio. Retirá-lo da cadeia muda o hash do primeiro registo e, com ele, o de toda a cadeia.

  6. «&» não codificado no número de série

    Parte a URL do QR em dois parâmetros e o serviço de verificação não encontra a fatura. Codifica sempre os valores.

  7. Dois processos com o mesmo hash anterior

    Quando duas caixas ou dois workers faturam ao mesmo tempo sem bloqueio, a cadeia bifurca-se. Serializa o cálculo por sistema e instalação.

  8. Recalcular sobre dados «normalizados»

    O hash calcula-se sobre o valor que vai no XML. Se o teu XML leva 123.10 e o hash é calculado com 123.1, não vão coincidir.

O que esta calculadora não faz

Calcula o hash e a URL do QR para testares a tua implementação. Não gera o XML completo do registo, não o assina (XAdES) nem o envia à AEAT, que é o que transforma um programa num sistema Verifactu: fila de envios, controlo de fluxo, novas tentativas, retificativas e declaração responsável (declaración responsable).

É isso que fazemos na Kiwop: adaptamos ao Verifactu o teu software próprio, o teu ERP ou a tua loja online, ou desenvolvemos-te a faturação à medida, e entregamos-te a declaração responsável.

Ver o serviço Verifactu

Perguntas frequentes

Perguntas frequentes

Sobre o hash, o QR e a calculadora.

Que algoritmo usa o hash do Verifactu?

SHA-256, o único que a AEAT admite hoje (lista L12 do anexo da Orden HAC/1177/2024, as especificações técnicas do Verifactu). O resultado é expresso em hexadecimal, em maiúsculas, com 64 caracteres.

Como se calcula o hash do primeiro registo?

Como o dos outros, mas com o campo do hash anterior vazio: a cadeia leva Huella= sem nada a seguir. O registo marca ainda PrimerRegistro com «S» e não leva bloco de registo anterior. O caso 1 dos exemplos oficiais é exatamente isso.

Os montantes 123.1 e 123.10 dão o mesmo hash?

Não: o hash é um SHA-256 da cadeia, por isso mudar um carácter muda-o. O que a AEAT diz é que admite os dois formatos (uma ou duas casas decimais) como válidos; o que tem de acontecer é que o hash seja calculado com o mesmo valor que vai no teu XML.

A calculadora envia os meus dados para algum lado?

Não. O hash é calculado no teu navegador com a Web Crypto API e o QR também é desenhado localmente. Não há servidor por trás da ferramenta e não guardamos o que escreves.

Que tamanho tem de ter o QR do Verifactu?

Entre 30×30 e 40×40 mm, segundo a norma ISO/IEC 18004 e com nível de correção de erros M. Deve ter pelo menos 2 mm de margem em branco (recomendam-se 6) e ir no início da fatura, na primeira página, com «QR tributario:» por cima. O SVG que a calculadora descarrega mede 35 mm.

O que significa «Aceptado con errores» (aceite com erros)?

É o estado em que a AEAT deixa um registo VERI*FACTU que recebeu mas em que encontrou algo errado, por exemplo um hash que não coincide com o seu cálculo. O registo existe, mas tens de o corrigir com uma subsanación (correção). Por isso convém testar o hash antes de passar a produção.

Posso usar a URL de testes em faturas reais?

Não. prewww2.aeat.es é o ambiente de testes externos e só serve para os registos enviados para esse ambiente. As faturas reais levam a URL de produção, www2.agenciatributaria.gob.es.

Fontes

Fontes

Documentos técnicos oficiais da AEAT em que a ferramenta se baseia, lidos a 7 de outubro de 2026.

  1. Detalle de las especificaciones técnicas para generación de la huella o hash (v0.1.2) Campos, ordem, formato e os três exemplos que a calculadora reproduz.
  2. Detalle de las especificaciones técnicas del código QR (v0.5.0) URL, parâmetros, codificação, tamanho e códigos de erro 1001 a 3002.
  3. Orden HAC/1177/2024, especificações técnicas Artigos 13 (hash), 20 e 21 (representação gráfica e QR).
  4. Informação técnica do Verifactu no portal da AEAT Esquemas, WSDL, validações e ambiente de testes.
  5. QR Code generator library, do Project Nayuki Licença MIT. Gera o QR no teu navegador.

Próximo passo

O teu hash já bate certo? O difícil vem depois

Envio, novas tentativas, retificativas, concorrência e declaração responsável. Deixamos-te tudo a funcionar no teu sistema.

  • Sem compromisso
  • Resposta em 24h
  • Proposta personalizada