QRコードの仕様をまとめた

## 概要
普段から様々な場所で使われているQRコード、ちょっと仕様を把握する必要があったので調べたことを簡単にまとめます。
随時更新していきます。
量が増えてきたらそれぞれの項目ごとのページを作って移すかも。
## 目次
- [セル](#セル)
    - [モジュール](#モジュール)
- [シンボル](#シンボル)
- [バージョン](#バージョン)
- [ファインダパターン](#ファインダパターン)
- [アライメントパターン](#アライメントパターン)
- [タイミングパターン](#タイミングパターン)
- [クワイエットゾーン](#クワイエットゾーン)
- [フォーマット情報](#フォーマット情報)
    - [誤り訂正レベル](#誤り訂正レベル)
        - [誤り訂正符号](#誤り訂正符号)
        - [リードソロモン法](#リードソロモン法)
    - [マスク](#マスク)

## 用語
### <font color="Crimson">**セル**</font>
QRコードを構成する最小の単位。（白黒の正方形）
![cell.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510520/45c9fdbc-b9e1-02b1-630a-0faf2200e23c.png)
https://bunkyo-kumihan.com/kumihan_blog/?p=2952 より

### <font color="Crimson">**モジュール**</font>
[セル](#セル)と同義。

---
### <font color="Crimson">**シンボル**</font>
QRコードそのもの。
QRコードはマトリクス型二次元シンボルの一つ。
<img width="898" alt="スクリーンショット 2020-03-12 11.53.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510520/72a28306-3f7e-d70e-80d6-4407f58da2bf.png">
http://k-cr.jp/content/wp-content/uploads/2013/11/QR_Code2.pdf より

また、シンボルサイズには規定がある。

|シンボル  |[セル](#セル)サイズ  |
|---|---|
|最小シンボルサイズ  |21セル× 21セル  |
|最大シンボルサイズ  |177セル× 177セル  |
https://www.keyence.co.jp/ss/products/autoid/codereader/basic2d_qr.jsp より

---
### <font color="Crimson">**バージョン**</font>
1から40まであり、バージョンごとの[セル](#セル)数が規定されている。
内包するデータ量とデータの種類、[誤り訂正レベル](#誤り訂正レベル)を決定することでバージョンが決まる。
データは数字、英数字、バイナリ、漢字のいずれかから選ぶ。（混合も可能）
![version.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510520/519ac912-eaaa-afdd-aa10-c5f6f222cc1f.png)
[バージョン一覧](https://www.qrcode.com/about/version.html)

---
### <font color="Crimson">**ファインダパターン**</font>
QRコードの3コーナーに配置される位置検出用パターン。
黒白が `1:1:3:1:1` の比率になるよう規定されている。
これによってQRコードの回転角度を検出し、360度どこからでも高速で読み込めるようになっている。
<img width="641" alt="スクリーンショット 2020-03-12 13.51.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510520/2a153b42-e847-7c9a-b61a-0fb3a8f336ab.png">
https://www.keyence.co.jp/ss/products/autoid/codereader/basic2d_qr.jsp より

---
### <font color="Crimson">**アライメントパターン**</font>
QRコードの歪み補正（射影変換）に使用されるパターン。
黒白が `1:1:1:1:1` になるよう規定されている。
[バージョン](#バージョン)が高くなると個数が増える一方、[バージョン](#バージョン)が低いものはない場合もある。
![alignment.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510520/b465d401-b72e-4be2-05c8-8bc7dd475448.png)
https://www.keyence.co.jp/ss/products/autoid/codereader/basic2d_qr.jsp より

---
### <font color="Crimson">**タイミングパターン**</font>
[シンボル](#シンボル)内の[モジュール](#モジュール)座標を決定するのに使用されるパターン。
黒白[セル](#セル)が交互に並ぶ。
[シンボル](#シンボル)が歪んだりして誤差が生じた場合に、[モジュール](#モジュール)の中心座標を補正する。
![timing.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510520/a28c62bb-34f3-ec8d-74c3-befe53857e91.png)
https://www.keyence.co.jp/ss/products/autoid/codereader/basic2d_qr.jsp より

---
### <font color="Crimson">**クワイエットゾーン**</font>
[シンボル](#シンボル)のまわりにある空白部分。
モデル1、モデル2で4[セル](#セル)分、マイクロQRコードで2[セル](#セル)分の空白が必要
このページでは通常のQRコード（モデル2）以外は特筆しない。
![quite.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510520/5a042859-4556-182f-ce7a-d65469a82b0e.png)
https://www.keyence.co.jp/ss/products/autoid/codereader/basic2d_qr.jsp より

---
### <font color="Crimson">**フォーマット情報**</font>
使用されている[誤り訂正レベル](#誤り訂正レベル)と[マスク](#マスク)パターンの情報。
デコードで最初に読み込まれる部分。
![format.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510520/222af6b6-9878-8f2e-cdaf-de28bca05027.png)
https://www.keyence.co.jp/ss/products/autoid/codereader/basic2d_qr.jsp より

---
### <font color="Crimson">**誤り訂正レベル**</font>
コードが汚れていたり破損していた場合に、コード自身でデータを復元する機能の復元率。
4段階規定されている。
![error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510520/47766dcf-bb81-205f-fcee-337b75897f68.png)
[誤り訂正機能について](https://www.qrcode.com/about/error_correction.html)

### <font color="Crimson">**誤り訂正符号**</font>
誤り訂正のため、[リードソロモン法](#リードソロモン法)を用いて生成された符号。
![error2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510520/1a7b384a-56cf-8191-7a5c-957400581682.png)
https://www.keyence.co.jp/ss/products/autoid/codereader/basic2d_qr.jsp より

### <font color="Crimson">**リードソロモン法**</font>
リード・ソロモン符号（符号理論における誤り訂正符号の一種）を用いた符号化、復元法。
数学専門知識が必要になるのでこのページでは特筆しない。
[リード・ソロモン符号](https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%BC%E3%83%89%E3%83%BB%E3%82%BD%E3%83%AD%E3%83%A2%E3%83%B3%E7%AC%A6%E5%8F%B7#%E7%AC%A6%E5%8F%B7%E5%8C%96)

---
### <font color="Crimson">**マスク**</font>
データを配置した状態で一方の色が極端に多かったり、[ファインダパターン](#ファインダパターン)に類似した模様があると、読み込みに支障をきたす場合があるため、模様に補正をかけるためのパターン。
8種類の中から最適なものを選ぶ。
![mask.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/510520/ae7c5b51-4f43-2636-d9ed-b27bc7c081f9.png)
https://qiita.com/amanao/items/b7c54a3c73a8301b2412 より