在go语言中使用rsc/qr扩展包生成二维码流程步骤
如何用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")
}
输出:
注意:
本教程生成的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
相关文章