Skip to content
All tools
Free tool

ZATCA QR (TLV) encoder and decoder

Build the Base64 TLV payload behind a ZATCA simplified e-invoice QR code from the five required fields, or paste a payload to decode it. This outputs the TLV payload, not a QR image.

Encode fields to TLV

The VAT-registered supplier name. Arabic is supported.
15-digit VAT number of the seller.
ISO 8601 date and time, for example 2026-01-15T14:30:00Z.
The grand total including VAT.
The VAT amount on the invoice.
Base64 TLV payload
 

A QR encoder turns this Base64 string into the printed QR code. This tool gives you the payload, not the image.

Decode a TLV payload

How it works

TLV, tag by tag

The ZATCA simplified QR payload is five Tag-Length-Value records concatenated and Base64 encoded. Each record is a tag byte, a length byte, then the value in UTF-8 bytes. The length is the byte count, which matters for Arabic text.

Five required tags

Tag 1 seller name, Tag 2 VAT number, Tag 3 timestamp, Tag 4 invoice total with VAT, Tag 5 VAT total. Order matters and all five are expected.

Byte length, not character count

The length byte counts UTF-8 bytes. An Arabic seller name uses more bytes than characters, so the encoder measures bytes to keep the payload valid.

Payload, not a QR image

This tool returns the Base64 payload only. A separate QR encoder renders it into the square code printed on the invoice. Nothing is uploaded.

Sources

The TLV structure and field order follow the ZATCA e-invoicing specification. Confirm against the source below.

This encodes and decodes the TLV payload as an example aid. Confirm the exact field formats and the current QR requirement against the ZATCA specification before use. Requirements change.

Generate ZATCA QR codes straight from your invoices

Rivane builds the TLV payload and the QR for every simplified invoice, so the code is on the receipt without a manual step.

Request demo