| Name | ID | Format | Length | Presence | Comment |
|---|---|---|---|---|---|
| Payload Format Indicator | "00" | N | "02" | M | Refer to Ref A. |
| Point of Initiation Method | "01" | N | "02" | O | "11" for static, "22" for dynamic Refer to Ref A. |
| Merchant Account Information | "02"-"51" | ans | Each var. up to "99" | M | At least one Merchant Account Information data object shall be present. Refer to Ref A. |
| Transaction Currency | "53" | N | "03" | M | Fixed to "704" Refer to Ref A. |
| Country Code | "58" | ans | "02" | M | Fixed to "VN" Refer to Ref A. |
| Additional Data Field Template | "62" | S | var. up to "99" | O | Refer to Ref A. |
| CRC | "63" | ans | "04" | M | Refer to Ref A. |
| Name | ID | Format | Length | Presence |
|---|---|---|---|---|
| Purpose of Transaction | "08" | ans | var. up to "25" | O |
VietQR - Merchant Account Information (ID "38")
| Data Object | Input Characters | Remarks |
|---|---|---|
| Merchant Account Information | "3856" | Floating ID "38". This ID is allocated for this QR only Refer to Ref B. |
| - Global Unique Identifier - Beneficiary Organization * ACQ ID / BNB ID * Merchant ID / Consumer ID - Service Code |
"0010A000000727" "012600069704150112113366668888" "0208QRIBFTTA" |
Reversed domain 970415 - NAPAS BIN 113366668888 QRIBFTTA / QRIBFTTC |
Sample code
package main
import (
"fmt"
"giautm.dev/emvqr"
qrcode2 "github.com/lizebang/qrcode-terminal"
"github.com/skip2/go-qrcode"
)
func main() {
i := &emvqr.VietQRInput{
AcqID: "970415",
AccountNo: "113366668888",
Amount: 79000,
AdditionalInfo: "Ung Ho Quy Vac Xin",
}
payload, err := i.BuildPayload()
if err != nil {
panic(err)
}
fmt.Println("Data", payload)
qrcode2.QRCode(payload, qrcode2.BrightWhite, qrcode2.NormalBlack, qrcode.Medium)
}Performance
goos: darwin
goarch: amd64
pkg: giautm.dev/emvqr
cpu: Intel(R) Core(TM) i5-8279U CPU @ 2.40GHz
Benchmark_BuildPayload
Benchmark_BuildPayload-8 701736 1441 ns/op 672 B/op 10 allocs/op
PASS
ok giautm.dev/emvqr 1.695s