在go语言中使用rsc/qr扩展包生成二维码流程步骤

2023-06-01 00:00:00 生成 扩展 步骤

如何用https://godoc.org/code.google.com/p/rsc/qr包生成QR码。

二维码的生成在现实世界中有很多应用,而且在全球范围内的应用越来越多,特别是在在线安全和移动应用方面。

对于移动设备......除了在手机上手动输入数据外,扫描二维码是捕捉文本数据的第二种最流行的形式。


使用https://godoc.org/code.google.com/p/rsc/qr包,生成二维码是相当容易和直接的。

话不多说,这里有一个在Golang中生成QR码的例子。


示例代码:

 package main
 
 import (
         "bytes"
         "code.google.com/p/rsc/qr"
         "crypto/rand"
         "fmt"
         "image"
         "image/png"
         "os"
         "runtime"
 )
 
 func randStr(strSize int, randType string) string {
         var dictionary string
         if randType == "alphanum" {
                 dictionary = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
         }
         if randType == "alpha" {
                 dictionary = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
         }
         if randType == "number" {
                 dictionary = "0123456789"
         }
         var bytes = make([]byte, strSize)
         rand.Read(bytes)
         for k, v := range bytes {
                 bytes[k] = dictionary[v%byte(len(dictionary))]
         }
         return string(bytes)
 }
 
 func main() {
         //最大限度地提高CPU的使用率,以获得最大的性能
         runtime.GOMAXPROCS(runtime.NumCPU())
         //产生一个随机字符串--最好是6或8个字符
         randomStr := randStr(6, "alphanum")
         fmt.Println(randomStr)
            //生成链接或任何你想要的数据
            // 编码成QR码
            // 在这个例子中,我们使用一个通过QR码进行购买的例子。
            // 用你的东西来代替 stuff2buy。
         stuff2buy := "stuffpurchaseby?userid=" + randomStr + "&issuer=SomeBigSuperMarket"
         //将 stuff2buy 编码为 QR 码
             // qr.H = 65%的冗余水平
             // 见 https://godoc.org/code.google.com/p/rsc/qr#Level
         code, err := qr.Encode(stuff2buy, qr.H)
         if err != nil {
                 fmt.Println(err)
                 os.Exit(1)
         }
         
         imgByte := code.PNG()
         //将字节转换为图像以保存在文件中
         img, _, _ := image.Decode(bytes.NewReader(imgByte))
         //将imgByte保存到文件中
         out, err := os.Create("./QRImg.png")
         if err != nil {
                 fmt.Println(err)
                 os.Exit(1)
         }
         err = png.Encode(out, img)
         if err != nil {
                 fmt.Println(err)
                 os.Exit(1)
         }
         //
         fmt.Println("生成二维码并保存到QRimg1.png")
 }

输出:

图片base64.png


注意:

本教程生成的QR码与谷歌认证器不兼容。

如果你想用Google Authenticator生成用于双因素认证的QR码,你需要使用

https://github.com/google/google-authenticator/wiki/Key-Uri-Format 

中指定的URI格式来生成QR码。


谷歌认证器的二维码教程

https://www.socketloop.com/tutorials/golang-generate-qr-codes-for-google-authenticator-app-and-fix-cannot-interpret-qr-code-error

相关文章