6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

golangでQRコードを生成するパッケージを作ってみた

Last updated at Posted at 2017-10-11

どうもはじめまして、qiitaには初めて投稿するプログラミング初心者です。
今年の夏ごろからgolangの本を読んでいて、golangを学ぶ過程でgolangで何か作りたいなと考えてQRコードを生成するパッケージを自作してみました。
githubはこちら
※あくまでもgolangの学習目的で制作したものであり、完全な動作は保証しませんのでご注意下さい。
※QRコードのバージョン情報はバージョン7までしか記録していないので、素の状態だとバージョン7までのQRコードが生成できます。

使い方

package main
import (qrcode "github.com/taiga533/GO-QRMaker")

func main () {
  //pngとしてQRコードを出力します。
  //qrcode.SimplyEncode("QRコードにするデータ", "ファイルパス+ファイル名", 誤り訂正レベル[1~4], 画像サイズ[3倍なら3])
  err := qrcode.SimplyEncode("テスト文字列", ."/output/qrcode", 4, 2)
}

という感じです。

作るうえで苦労したところ

  • 誤り訂正符号の実装
    JISの規格書(X 0510)を読めば分かる話なのですが、QRコードはBCH符号やRS符号といった誤り訂正符号を利用しQRコードの読み取り精度を上げています。
    この誤り訂正符号が数学に弱い私にとっては曲者でITレストラン様yamicha.com's Blog様を拝見しながら気合で実装しました。
  • sliceを扱う
    golangにおける可変長配列であるsliceの扱いでコピー先の値を変更したらコピー元の値も変更されているとかをたまに忘れしまったりして苦労しました。

作ってみてよかったと思うこと

  • golangに対する理解が深まった
    スターティングgo言語という本を読んだ後に作ったのですが、本を読むだけより良かったのかなと思います。
  • QRコードにとても詳しくなった気がする
    すごいどうでもいいことですが最近街中でQRコードを見かけると(このQRコードのバージョンいくつだ?)とか思うようになった。

後悔とこれから

今回はできる限り自分で考えることを優先して作成したので、2進数を文字列で処理しているのがダメなポイントだと思っています。後からgithubなんかでgolangのQRコード生成パッケージを見ていたらしっかり数値として扱っていたので参考にすべきでした。
なので今後なにか作ったりするときは他人のコードも参考にしていこうと思います。
それに関連してマスク処理における(1:1:3:1:1の暗:明:暗:明:暗)のパターンの減点を実装しておりませんのでご注意下さい。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?