vietqr

package module
v0.0.0-...-716d887 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 18, 2024 License: Apache-2.0 Imports: 7 Imported by: 0

README

vietqr

This Go-based library enables encoding and decoding for VietQR, a standardized QR code solution for payment and transfer services across Vietnam's NAPAS network. Once encoded, the QR code can be further customized using any QR code generator that converts text to QR format.

VietQR serves as a unified brand identity for QR-based payments and transfers, seamlessly processed through the NAPAS network, member banks, payment intermediaries, and domestic and international partners. It complies with the EMV Co. QR payment standards and adheres to foundational QR code standards established by the State Bank of Vietnam.

Sample

package main

import (
	"github.com/sunary/vietqr"
)

func main() {
	println("encode", vietqr.Encode(vietqr.TransferInfo{
		BankCode: vietqr.TECHCOMBANK,
		BankNo:   "9796868",
		Message:  "gen by sunary/vietqr",
	}))

	info, err := vietqr.Decode("00020101021138510010A00000072701210006970407010797968680208QRIBFTTA53037045802VN62240820gen by sunary/vietqr6304BE74")
	if err != nil {
		println("err", err.Error())
		return
	}

	println("bank_code", info.BankCode)
	println("bank_no", info.BankNo)
	println("amount", info.Amount)
	println("message", info.Message)
}

Run online: go.dev/play

Documentation

Index

Constants

View Source
const (
	ABBANK                  = "ABBANK"
	ACB                     = "ACB"
	AGRIBANK                = "AGRIBANK"
	BAC_A_BANK              = "BAC_A_BANK"
	BAOVIET_BANK            = "BAOVIET_BANK"
	BANVIET                 = "BANVIET"
	BIDV                    = "BIDV"
	CAKE                    = "CAKE"
	CBBANK                  = "CBBANK"
	CIMB                    = "CIMB"
	COOP_BANK               = "COOP_BANK"
	DBS_BANK                = "DBS_BANK"
	DONG_A_BANK             = "DONG_A_BANK"
	EXIMBANK                = "EXIMBANK"
	GPBANK                  = "GPBANK"
	HDBANK                  = "HDBANK"
	HONGLEONG_BANK          = "HONGLEONG_BANK"
	HSBC                    = "HSBC"
	IBK_HCM                 = "IBK_HCM"
	IBK_HN                  = "IBK_HN"
	INDOVINA_BANK           = "INDOVINA_BANK"
	KASIKORN_BANK           = "KASIKORN_BANK"
	KEB_HANA_BANK_HCM       = "KEB_HANA_BANK_HCM"
	KEB_HANA_BANK_HN        = "KEB_HANA_BANK_HN"
	KIENLONG_BANK           = "KIENLONG_BANK"
	KOOKMIN_BANK_HCM        = "KOOKMIN_BANK_HCM"
	KOOKMIN_BANK_HN         = "KOOKMIN_BANK_HN"
	LIENVIETPOST_BANK       = "LIENVIETPOST_BANK"
	MBBANK                  = "MBBANK"
	MB_SHINSEI              = "MB_SHINSEI"
	MIRAE_ASSET             = "MIRAE_ASSET"
	MSB                     = "MSB"
	NAM_A_BANK              = "NAM_A_BANK"
	NCB                     = "NCB"
	NONGHYUP_BANK_HN        = "NONGHYUP_BANK_HN"
	OCB                     = "OCB"
	OCEANBANK               = "OCEANBANK"
	PGBANK                  = "PGBANK"
	PUBLIC_BANK             = "PUBLIC_BANK"
	PVCOM_BANK              = "PVCOM_BANK"
	SACOMBANK               = "SACOMBANK"
	SAIGONBANK              = "SAIGONBANK"
	SCB                     = "SCB"
	SEA_BANK                = "SEA_BANK"
	SHB                     = "SHB"
	SHINHAN_BANK            = "SHINHAN_BANK"
	SINOPAC_BANK_HCM        = "SINOPAC_BANK_HCM"
	STANDARD_CHARTERED_BANK = "STANDARD_CHARTERED_BANK"
	TECHCOMBANK             = "TECHCOMBANK"
	TIMO                    = "TIMO"
	TNEX                    = "TNEX"
	TPBANK                  = "TPBANK"
	UBANK                   = "UBANK"
	UNITED_OVERSEAS_BANK    = "UNITED_OVERSEAS_BANK"
	VIB                     = "VIB"
	VIET_A_BANK             = "VIET_A_BANK"
	VIET_BANK               = "VIET_BANK"
	VIET_CREDIT             = "VIET_CREDIT" // CFC
	VIETCOMBANK             = "VIETCOMBANK"
	VIETINBANK              = "VIETINBANK"
	VPBANK                  = "VPBANK"
	VRB                     = "VRB"
	WOORI_BANK              = "WOORI_BANK"
)

Variables

View Source
var (
	CRC16_ARC         = CrcParams{0x8005, 0x0000, true, true, 0x0000, 0xBB3D, "CRC-16/ARC"}
	CRC16_AUG_CCITT   = CrcParams{0x1021, 0x1D0F, false, false, 0x0000, 0xE5CC, "CRC-16/AUG-CCITT"}
	CRC16_BUYPASS     = CrcParams{0x8005, 0x0000, false, false, 0x0000, 0xFEE8, "CRC-16/BUYPASS"}
	CRC16_CCITT_FALSE = CrcParams{0x1021, 0xFFFF, false, false, 0x0000, 0x29B1, "CRC-16/CCITT-FALSE"}
	CRC16_CDMA2000    = CrcParams{0xC867, 0xFFFF, false, false, 0x0000, 0x4C06, "CRC-16/CDMA2000"}
	CRC16_DDS_110     = CrcParams{0x8005, 0x800D, false, false, 0x0000, 0x9ECF, "CRC-16/DDS-110"}
	CRC16_DECT_R      = CrcParams{0x0589, 0x0000, false, false, 0x0001, 0x007E, "CRC-16/DECT-R"}
	CRC16_DECT_X      = CrcParams{0x0589, 0x0000, false, false, 0x0000, 0x007F, "CRC-16/DECT-X"}
	CRC16_DNP         = CrcParams{0x3D65, 0x0000, true, true, 0xFFFF, 0xEA82, "CRC-16/DNP"}
	CRC16_EN_13757    = CrcParams{0x3D65, 0x0000, false, false, 0xFFFF, 0xC2B7, "CRC-16/EN-13757"}
	CRC16_GENIBUS     = CrcParams{0x1021, 0xFFFF, false, false, 0xFFFF, 0xD64E, "CRC-16/GENIBUS"}
	CRC16_MAXIM       = CrcParams{0x8005, 0x0000, true, true, 0xFFFF, 0x44C2, "CRC-16/MAXIM"}
	CRC16_MCRF4XX     = CrcParams{0x1021, 0xFFFF, true, true, 0x0000, 0x6F91, "CRC-16/MCRF4XX"}
	CRC16_RIELLO      = CrcParams{0x1021, 0xB2AA, true, true, 0x0000, 0x63D0, "CRC-16/RIELLO"}
	CRC16_T10_DIF     = CrcParams{0x8BB7, 0x0000, false, false, 0x0000, 0xD0DB, "CRC-16/T10-DIF"}
	CRC16_TELEDISK    = CrcParams{0xA097, 0x0000, false, false, 0x0000, 0x0FB3, "CRC-16/TELEDISK"}
	CRC16_TMS37157    = CrcParams{0x1021, 0x89EC, true, true, 0x0000, 0x26B1, "CRC-16/TMS37157"}
	CRC16_USB         = CrcParams{0x8005, 0xFFFF, true, true, 0xFFFF, 0xB4C8, "CRC-16/USB"}
	CRC16_CRC_A       = CrcParams{0x1021, 0xC6C6, true, true, 0x0000, 0xBF05, "CRC-16/CRC-A"}
	CRC16_KERMIT      = CrcParams{0x1021, 0x0000, true, true, 0x0000, 0x2189, "CRC-16/KERMIT"}
	CRC16_MODBUS      = CrcParams{0x8005, 0xFFFF, true, true, 0x0000, 0x4B37, "CRC-16/MODBUS"}
	CRC16_X_25        = CrcParams{0x1021, 0xFFFF, true, true, 0xFFFF, 0x906E, "CRC-16/X-25"}
	CRC16_XMODEM      = CrcParams{0x1021, 0x0000, false, false, 0x0000, 0x31C3, "CRC-16/XMODEM"}
)

predefined CRC-16 algorithms: http://reveng.sourceforge.net/crc-catalogue/16.htm

Functions

func Encode

func Encode(ti TransferInfo) string

Types

type CrcParams

type CrcParams struct {
	Poly   uint16
	Init   uint16
	RefIn  bool
	RefOut bool
	XorOut uint16
	Check  uint16
	Name   string
}

type Hash16

type Hash16 interface {
	hash.Hash
	Sum16() uint16
}

compatible with hash.Hash

func NewCrc16

func NewCrc16(algo CrcParams) Hash16

type TransferInfo

type TransferInfo struct {
	BankCode string

	BankNo  string
	Amount  int64
	Message string
	// contains filtered or unexported fields
}

func Decode

func Decode(s string) (*TransferInfo, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL