項目地址:yeqown/go-qrcode
同類項目:skip2/go-qrcode 糾錯算法和bitset使用了該庫,後續可能會考慮本身實現一遍git
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) } }
生成結果如圖:算法
分析輸入數據,根據數據決定要使用的QR碼版本、容錯級別和編碼模式。低版本的QR碼沒法編碼過長的數據,含有非數字字母字符的數據要使用擴展字符編碼模式。編碼
根據選擇的編碼模式,將輸入的字符串轉換成比特流,插入模式標識碼(mode indicator)和終止標識符(terminator),把比特流切分紅八比特的字節,加入填充字節來知足標準的數據字碼數要求。spa
對步驟二產生的比特流計算容錯碼,附在比特流以後。高版本的編碼方式可能須要將數據流切分紅塊(block)再分別進行容錯碼計算。code
根據結構圖把步驟三獲得的有容錯的數據流切分,準備填充。orm
把數據和功能性圖樣根據標準填充到矩陣中。ip
應用標準中的八個數據掩碼來變換編碼區域的數據,選擇最優的掩碼應用。講到再展開。字符串
計算格式和版本信息填入矩陣,完成QR碼。get