ZATCA 电子发票 QR(沙特 FATOORA)
沙特阿拉伯的 ZATCA(天课、税务和海关总局)规定,在王国境内开具的每张税务发票上都必须包含 QR 码。第一阶段使用简化 TLV;第二阶段通过与 FATOORA 平台集成增加加密印章。不合规发票会被买方会计软件拒绝,且无法用于申请 VAT 退款。
权威规范:ZATCA E-Invoicing Resolution & Implementing Regulations, 有效期至 2026 年。
第一阶段(生成):自 2021 年 12 月 4 日起生效。所有 VAT 注册企业必须开具带有 QR 码的电子发票。
第二阶段(集成):自 2023 年 1 月 1 日起按企业规模分批推行。为标准发票新增数字签名 + ZATCA 清算,为简化发票新增实时报告。
第一阶段(生成):自 2021 年 12 月 4 日起生效。所有 VAT 注册企业必须开具带有 QR 码的电子发票。
第二阶段(集成):自 2023 年 1 月 1 日起按企业规模分批推行。为标准发票新增数字签名 + ZATCA 清算,为简化发票新增实时报告。
定义
QR 码对 Base64 字符串进行编码。解码 Base64 可获得包含 5 个必填字段(固定顺序)的二进制 TLV 序列:
| 标签 | 字段 | 类型 | 说明 |
|---|---|---|---|
01 | 卖方名称 | UTF-8 字符串 | 卖方的商号。阿拉伯语和拉丁语均可接受。 |
02 | VAT 注册号 | 15 位数字 | 沙特实体以 3 开头。格式:3XXXXXXXXXXXXX3。 |
03 | 发票时间戳 | ISO 8601 | 例如 2026-04-18T10:30:00Z。必须包含时区。 |
04 | 发票总额(含 VAT) | 十进制字符串 | 例如 115.00。货币默认为 SAR。 |
05 | VAT 金额 | 十进制字符串 | 例如 15.00。当前标准税率 15%。 |
06 | 发票哈希(第二阶段) | Base64 SHA-256 | 规范发票 XML 的 SHA-256。 |
07 | 数字签名(第二阶段) | Base64 | 使用卖方 CSID 证书对发票哈希的 ECDSA 签名。 |
08 | 公钥(第二阶段) | Base64 X.509 | 卖方的 ECDSA 公钥(来自 CSID)。 |
09 | ZATCA 印章(第二阶段) | Base64 | ZATCA 的反签名。仅在 ZATCA 清算后才存在。 |
每条 TLV 记录由 1 字节标签 + 1 字节长度 + <长度> 字节值组成。整个序列随后经过 Base64 编码成为 QR 载荷。
第一阶段(简化)与第二阶段(集成)对比
| 方面 | 第一阶段 | 第二阶段 |
|---|---|---|
| QR 内容 | 仅标签 01–05 | 标签 01–05 以及 06、07、08,可选 09 |
| ZATCA 集成 | 无, 离线 | 简化发票用实时 API,标准发票用清算流程 |
| 所需证书 | 无 | 是, 由 ZATCA 颁发的 CSID(加密印章标识符) |
| 生效日期 | 2021-12-04(所有企业) | 2023-01-01(按收入分批推行) |
| 发票范围 | B2C(简化)+ B2B(标准) | B2C 简化:实时报告。B2B 标准:开具前清算(预验证)。 |
标准测试向量
TLV 示例(Base64 之前):
01 0A "Acme Saudi" 02 0F "300000000000003" 03 14 "2026-04-18T10:30:00Z" 04 06 "115.00" 05 05 "15.00"Base64 编码后:
AQpBY21lIFNhdWRpAg8zMDAwMDAwMDAwMDAwMDMDFDIwMjYtMDQtMThUMTA6MzA6MDBaBAYxMTUuMDAFBTE1LjAw| 情形 | 输入 | Base64 前缀 |
|---|---|---|
| 第一阶段,最小简化 | seller=Acme Saudi | AQpBY21lIFNhdWRp... |
| 阿拉伯语卖方名称 | seller=شركة أكمي | 卖方名称在 Base64 之前于 TLV 内部以 UTF-8 编码。 |
| 第二阶段标准发票 | 以上所有内容加上 hash=<SHA-256 Base64> | Base64 长得多。解码器必须支持 05 之后的额外标签。 |
常见问题
- VAT 号码长度。 ZATCA VAT 号码恰好为 15 位,以
3开头和结尾。任何其他值都会在发票接收侧验证失败。 - 不含时区的时间戳。 规范要求带有明确时区(
Z或+03:00)的 ISO 8601 格式。不带时区的本地时间戳将被拒绝。 - 编码顺序。 TLV 字段必须按标签编号顺序(01、02、03、04、05、…)排列。重新排序会使 QR 解码成功,但某些验证工具会将其标记为非规范格式。
- 小数格式。 发票总额和 VAT 金额使用点号十进制(
115.00),不使用逗号十进制(115,00)。也不使用千位分隔符。 - 货币默认为 SAR。 外币发票的 QR 字段仍须转换为 SAR。底层 XML 可包含原始货币;QR 码则不含。
- 第二阶段清算失败。 提交至 ZATCA 清算 API 的标准发票可能被拒绝(CSID 错误、XML 格式错误、税额计算错误)。发票在清算完成前在法律上无效。请使用带指数退避的重试循环;清算成功前不要开具发票。
- CSID 证书轮换。 第二阶段 CSID 会到期(通常为 1 年)。请在电子发票系统中加入续期检查,否则将突然无法开具发票。
扫描仪兼容性
| 读取器 | 支持 | 说明 |
|---|---|---|
| ZATCA FATOORA 应用 | 原生 | 官方部委应用;根据 ZATCA PKI 验证第二阶段签名。 |
| 沙特会计软件(SAP B1、Oracle、Microsoft Dynamics) | 原生(2023 年后) | 本地化沙特版本的 AP 流水线中内置了 ZATCA 解析器。 |
| iOS 相机 | 原始 Base64 | 不识别为税务发票。用户需打开 FATOORA 应用。 |
| Android 相机 / Google Lens | 原始 Base64 | 同上, 无原生解析。 |
| 第三方审计工具(PwC、KPMG、德勤沙特团队) | 原生 | 审计技术套件可解析并验证第二阶段签名。 |
另请参阅
- /zatca-saudi-einvoice-qr-code/, 生成器。
- /standards/, 返回标准索引。
- ZATCA 开发者门户, 权威资源和 FATOORA 沙箱。