switch to gozxing for visual similarity with SIX reference impl

The SIX reference implementation in Java that can be found at
https://www.paymentstandards.ch/dam/downloads/qrcodegenerator.java
uses the zxing library to generate their QR codes.

zxing is also available as a Go version, which we now use.
This means the QR codes can be compared visually to the reference.
This commit is contained in:
Michael Stapelberg
2020-11-07 13:11:34 +01:00
parent 6bc1ad3197
commit 11ded9c5ab
3 changed files with 22 additions and 8 deletions

3
go.mod
View File

@@ -7,6 +7,9 @@ require (
github.com/ajstarks/svgo v0.0.0-20200320125537-f189e35d30ca
github.com/boombuler/barcode v1.0.0
github.com/davecgh/go-spew v1.1.1
github.com/makiuchi-d/gozxing v0.0.0-20200903113411-25f730ed83da
github.com/mattn/go-isatty v0.0.12
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
golang.org/x/text v0.3.4 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
)

7
go.sum
View File

@@ -6,9 +6,16 @@ github.com/boombuler/barcode v1.0.0 h1:s1TvRnXwL2xJRaccrdcBQMZxq6X7DvsMogtmJeHDd
github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/makiuchi-d/gozxing v0.0.0-20200903113411-25f730ed83da h1:OgNu1PPD9EvZckyKDAc8DA4KymNXuc6vaCLsdOGyjOE=
github.com/makiuchi-d/gozxing v0.0.0-20200903113411-25f730ed83da/go.mod h1:WoI7z45M7ZNA5BJxiJHaB+x7+k8S/3phW5Y13IR4yWY=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

View File

@@ -19,8 +19,10 @@ import (
"image"
"image/draw"
"github.com/boombuler/barcode"
"github.com/boombuler/barcode/qr"
"github.com/makiuchi-d/gozxing"
"github.com/makiuchi-d/gozxing/common"
"github.com/makiuchi-d/gozxing/qrcode"
"github.com/makiuchi-d/gozxing/qrcode/decoder"
)
// This is a port of the Java 1.7 reference example from paymentstandards.ch:
@@ -52,15 +54,17 @@ func generateSwissQrCode(payload string) (image.Image, error) {
}
func generateQrCodeImage(payload string) (image.Image, error) {
code, err := qr.Encode(payload, qr.M, qr.Unicode)
w := qrcode.NewQRCodeWriter()
hints := map[gozxing.EncodeHintType]interface{}{
gozxing.EncodeHintType_ERROR_CORRECTION: decoder.ErrorCorrectionLevel_M,
gozxing.EncodeHintType_CHARACTER_SET: common.CharacterSetECI_UTF8,
}
matrix, err := w.Encode(payload, gozxing.BarcodeFormat_QR_CODE, qrCodeEdgeSidePx, qrCodeEdgeSidePx, hints)
if err != nil {
return nil, err
}
qrcode, err := barcode.Scale(code, qrCodeEdgeSidePx, qrCodeEdgeSidePx)
if err != nil {
return nil, err
}
return qrcode, nil
return matrix, nil
}
func overlayWithSwissCross(qrCodeImage image.Image) (image.Image, error) {