QR-Code implementation in Swift for the e-invoicing (Fatoora). (Zatca-Fatoora)
Xcode 13
iOS 15
You can directly compile and run the code on Xcode 13
IDE and for earlier Xcode versions (< 13)
you can export ZatcaQRCodeGenerator.swift
& Extensions.swift
files into your project.
Step 1: Create an istance from ZatcaQRCodeGenerator
class
var qrCodegenerator = ZatcaQRCodeGenerator(tags: [
ZatcaQRCodeTag(tag: .SellerNameTag, value: "Jawad"), // {Seller name}
ZatcaQRCodeTag(tag: .VatIdTag, value: "123456789"), // {Seller TAX ID}
ZatcaQRCodeTag(tag: .DateTimeTag, value: "2021-11-24T11:11:11Z"), // {Invoice Date/Time}
ZatcaQRCodeTag(tag: .InvoiceTotalWithVatTag, value: "100.00"), // {Order Total Amount including VAT}
ZatcaQRCodeTag(tag: .InvoiceVatTag, value: "15.00"), // {Order VAT Amount}
])
Step 2: Generate the Base64 Encoded String or TLV (Tag Length Value) format or the QR Code Image in this way
qrCodegenerator.base64EncodedString!
// Output AQVKYXdhZAIJMTIzNDU2Nzg5AxQyMDIxLTExLTI0VDExOjExOjExWgQGMTAwLjAwBQQxNS4w
qrCodegenerator.tlvs!
// Output [1, 5, 74, 97, 119, 97, 100, 2, 9, 49, 50, 51, 52, 53, 54, 55, 56, 57, 3, 20, 50, 48, 50, 49, 45, 49, 49, 45, 50, 52, 84, 49, 49, 58, 49, 49, 58, 49, 49, 90, 4, 6, 49, 48, 48, 46, 48, 48, 5, 5, 49, 53, 46, 48, 48]
qrCodegenerator.qrCodeImage!
Step 1: Create an array of [UInt8]
data type to include the generated Tag Length Value list (TLV
).
public var tlv: [UInt8] = []
Step 2:
For each type from the following 5
tag types:
Seller name
Company VAT ID
Invoice Date/Time
Order total amount including VAT
Order VAT amout
We have to apply the following step:
- Append the
.utf8
values for the following:
tag
(5
Static Values1
or2
or3
or4
or5
).length
(Number of bytes for eachvalue
).value
the values for the5
tag types used in Step 1.
tlv = [UInt8(tag.rawValue)!, length] + [UInt8](value.utf8)
-
Download this app to validate is your QR code is meet Zatca requirements or not: E-Invoice QR Reader KSA قارئ الفاتورة الالكترونية
-
Sample of QR Reader
Insha'Allah, I will continue work on this package until support the whole cycle of QR code implementation.
- Support the digital signature for the QR code.
Kindly send to me here LinkedIn
Contributions are what makes the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
The MIT License (MIT). Please see License File for more information.