Dzzz

ZATCA 电子发票二维码里有什么,以及如何读取

沙特简易电子发票二维码内的五个字段,Base64 和 TLV 编码的原理,以及如何在你的设备上读取而不上传任何内容。

为什么要这样做

如果你在沙特购物,一定见过印在收据或发票底部的那个小方块二维码。它来自沙特天课、税务和海关总署(ZATCA)的电子发票规定。大多数人从不扫描它,但有不少很好的理由值得一扫:核对纸质收据上的总额和增值税是否与卖方编码的一致,把卖方的增值税号复制进报销单,或者读取一张只有照片的发票上的时间戳。如果你经营小生意,也许还想看看自己的系统往二维码里放了什么。

这个码并不是加密的秘密,而是一小段有结构的文本,了解了它的排布,读起来很容易。

如何操作,用哪个工具

这里有两个工具配合使用:用二维码与条码识别来扫描,用 ZATCA 发票二维码页面来解析字段。

**里面有什么。**简易发票的二维码带有五个字段,每个字段都存成「标签、长度、值」的形式,这就是「TLV」的含义:

  1. 标签 1:卖方名称。
  2. 标签 2:卖方的增值税登记号(15 位)。
  3. 标签 3:发票时间戳。
  4. 标签 4:含增值税的发票总额。
  5. 标签 5:增值税金额。

这些字节随后会被转换成 Base64,这是一种只用字母、数字和少数符号来书写二进制数据的方法,使它能作为普通文本传递。二维码里真正存放的就是这段 Base64 文本。

扫描它。打开二维码与条码识别,点击打开摄像头,把镜头对准二维码。没有快门按钮:它会自动读取。你也可以点击上传图片或粘贴图片,使用照片或截图。如果画面里有多个码,工具会列出它们,让你选择一个。结果卡片会把它标为「ZATCA 发票二维码」,并提供在 ZATCA 解码器中打开。

解析它。在 ZATCA 发票二维码页面停留在解析标签。你可以点击粘贴文本输入原始 Base64 字符串,点击上传使用二维码照片,或点击扫描调用摄像头。随后工具会显示总额(含增值税)、增值税金额、卖方、增值税号和时间戳,每一项都有复制按钮。

**核对算术。**把增值税金额与总额对比。按标准的 15% 税率,增值税等于总额减去(总额 ÷ 1.15):总额 115.00 SAR 应当显示 15.00 SAR 的增值税。如果数字对不上,可能是收据上有零税率或免税商品,也可能哪里出了错。

自己生成一个。在生成标签中填写卖方名称、增值税号和发票总额。时间戳会自动填入当前时间,增值税金额按 15% 自动填写,直到你手动修改。你可以把实时预览保存为 PNG 或 SVG,或点击复制 Base64。

需要注意什么

**解析只是读取字段,并不验证它们。**工具在自己的声明里就这么说:仅解析字段,不验证 ZATCA 签章或注册信息。一个能顺利解析的二维码仍可能是伪造的或有误的,因为任何人都能用五个看似合理的字段做出一个二维码。这里没有任何东西能确认卖方确实已登记。

**第一阶段和第二阶段不同。**上面的五个字段是简易发票第一阶段(开具)的要求。后续阶段大体上会加入与 ZATCA 系统的对接,并在二维码中加入额外的加密标签,例如签名。当一个码包含前五个之外的标签时,解码器会在「包含加密字段」下列出它们的标签号和字节大小,但不会检查它们。生成器只生成第一阶段的字段,工具也提醒:完整的 ZATCA 合规不止于二维码,请向 ZATCA 确认你自己的开票义务。

**不是每个二维码都是发票。**如果码是普通二维码,工具会显示「该二维码不是 ZATCA 电子发票」。如果部分内容无法读取,你会看到「数据被截断」,解决办法是拍一张更清晰、完整包含二维码的照片。如果增值税号不是 15 位,工具会标出提示。

像对待任何扫描器一样对待它。识别器从不自动打开链接,对于链接,它会先标出缩短的、不安全的或仿冒的地址。扫描记录保存在你的设备上的最近扫描中,全部清除可以删除它们。在一些设备上识别功能是内置的,在另一些设备上则会下载一个约 1 MB 的随附识别组件,首次使用后会缓存。无论哪种情况,解码都在你的设备上进行,发票数据不会上传。

**发票包含商业信息。**解码后的二维码会显示卖方名称、增值税号和总额。把解码文本粘贴到你无法掌控的聊天或表单中时,请当心。

常见问题

这个二维码是加密的吗?

不是。第一阶段的字段是明文,先用 TLV 编码再转成 Base64。任何人都能解码,所以解码并不能证明发票是真的。后续阶段二维码中额外的加密标签另有用途,本工具会列出它们,但不验证。

为什么总额和增值税看起来与纸质收据不同?

先看解码字段中的时间戳和金额。如果二维码里是一个总额,而打印的收据上是另一个,那么这种不一致正是你想找的,值得向卖方提出。也请记住,有些商品不含增值税,这会改变比例。

能用它确认卖方确实登记了增值税吗?

不能。工具只解码字段,并且只能在增值税号不是 15 位时给出提示。核实登记情况是另一个需要向 ZATCA 办理的步骤。

打开工具

扫码识别

把摄像头对准一个码,先看清它到底是什么再决定。