Golang QRCode 生成實現

項目地址:yeqown/go-qrcode
同類項目:skip2/go-qrcode 糾錯算法和bitset使用了該庫,後續可能會考慮本身實現一遍git

go-qrcode

示例

link to CODEgithub

package main

import (
    "fmt"

    qrcode "github.com/yeqown/go-qrcode"
)

func main() {
    qrc, err := qrcode.New("https://github.com/yeqown/go-qrcode")
    if err != nil {
        fmt.Printf("could not generate QRCode: %v", err)
    }

    // save file
    if err := qrc.Save("../testdata/repo-qrcode.jpeg"); err != nil {
        fmt.Printf("could not save image: %v", err)
    }
}

生成結果如圖:算法

repo-qrcode.jpeg

QRCode原理

1 數據分析(data analysis):

分析輸入數據,根據數據決定要使用的QR碼版本、容錯級別和編碼模式。低版本的QR碼沒法編碼過長的數據,含有非數字字母字符的數據要使用擴展字符編碼模式。編碼

2 編碼數據(data encoding):

根據選擇的編碼模式,將輸入的字符串轉換成比特流,插入模式標識碼(mode indicator)和終止標識符(terminator),把比特流切分紅八比特的字節,加入填充字節來知足標準的數據字碼數要求。spa

3 計算容錯碼(error correction coding):

對步驟二產生的比特流計算容錯碼,附在比特流以後。高版本的編碼方式可能須要將數據流切分紅塊(block)再分別進行容錯碼計算。code

4 組織數據(structure final message):

根據結構圖把步驟三獲得的有容錯的數據流切分,準備填充。orm

5 填充(module placement in matrix):

把數據和功能性圖樣根據標準填充到矩陣中。ip

6 應用數據掩碼(data masking):

應用標準中的八個數據掩碼來變換編碼區域的數據,選擇最優的掩碼應用。講到再展開。字符串

7 填充格式和版本信息(format and version information):

計算格式和版本信息填入矩陣,完成QR碼。get

參考文獻

相關文章
相關標籤/搜索