見出し画像

QRコード(二次元バーコード)の話(No339)

前回はバーコード(JANコード)のお話をしました。
今回はその続きとして、二次元バーコード(QRコード)のお話をします。

二次元バーコードにはいくつかの方式があるのですが、ここではQRコードについてお話をします。

バーコードでは、基本的に数字しか表現することができず、しかも10ケタ程度の表現まででしたが、QRコードでは、数字だけでなく英数字や記号を表記できるようになり、千文字を越える文字列でも表記できるようになりました。

英数字や記号が表記できる点を利用して、最近ではURLを手軽に伝える手段として、広告チラシや少額決済など様々なメディアでQRコードが利用されています。


QRコード

QRコードというのは、デンソーという自動車部品メーカが考案したもので、当初は製造業での工程管理用でした。

この部品は、いつ、どの作業を必要とする部品で、どこに納品するものかといった情報をバーコードリーダで読み取れれば便利だ、というところから始まったようです。

ところが、従来のバーコードはせいぜい15ケタ程度の数字しか表現できません。
管理したい項目が増えるにつれて、読み込まないといけないバーコードも増え続け、5コ10コとなり、読み込ませるだけでも手間がかかっていました。

なのでバーコードを二次元的ににならべて一回で読み込みできるようにしたい、ということから開発が始まったようです。

2年ほどの開発期間を経て、QRコードが開発されました。

余談ですが、デンソーはこのQRコードを特許登録したのですが、使用料(ロイヤリティ)を無料とし、誰でもQRコード関連商品を開発できるようにしました。
その結果、QRコードは他の二次元バーコードとは比較にならないほど利用され、普及することになります。そのおかげで、自動車部品メーカに過ぎないデンソーという会社が「QRコードのデンソー」として一般に広く知られることになり、とてつもないPR効果を得られたそうです。

これもコロンブスの卵ですね。

QRコードの使われ方

現在は、決済用でも広告用でも、WebでアクセスできるURL(インターネット上のありかを示す情報)となっていることが多いのですが、QRコードは別にインターネット用の機構ではありません。

上述の通り、工場での生産管理などに使うことが当初の目的でしたから、表記内容には制約などありません。
今でも工場ではロット番号や数量、納期、出荷先といった情報を記載する用途で使われています。表記内容は自由に決められます。

QRコードは別にインターネット用ではなく、バーコードよりも長い数字列や文字列を表記できる優れたバーコードに過ぎません。

たまたまこれをURL形式にしておくととても便利が良いので、URLとして使われることが多くなってきたということです。

QRコードの仕組み

では、実際のQRコードの仕組みについてお話をします。
QRコードでは、データは全てドット(点)で表現しています。黒点が1を、白点が0を示す2進数で表現されています。

通常、コンピュータ内部では全ての文字はコード化して処理しています。こういったコードの代表格が米国で定められたASCII(アスキー)規格です。
この番号体系は国際規約のISO(アイエスオー)や日本のJIS(ジス)でも踏襲されていて、コンピュータの世界では半ば常識となっています。

ところが、QRコードでは敢えて独自のコード体系化を行っています。その方がQRコードの表示サイズを小さくできるためです。逆に言えば、ASCIIコード体系を知っている人であってもQRコードから内容がわかりません。

ちなみに、どうでもいい話ですが、QRコードの内容は右下が最初のデータで、左上が最終データとなっています。

さて、QRコードの各々の値の決め方はかなり専門的で筆者もそれほどわかっていないので割愛しますが、一点どうしても触れておきたい点があります。

それが誤り訂正の方法です。

誤り検出と誤り訂正

誤り検出訂正というのは、仮に読み間違いがあったとしても、それを補正できる仕組みのことを言います。

一番簡単なのは、誤りの有無だけがわかる誤り検出で、このメルマガでも何度か登場しているチェックデジットやチェックサムといった方式がこれにあたります。

チェックデジットというのは、一連の番号が正しいかどうかをチェックするための数値で、バーコードやクレジットカードなどで使われています。

例えば一次元バーコードの13桁目は 次の式で求められています。
 (奇数桁の合計値+(偶数桁の合計値)×3))÷10のあまり

 例えば、前回引用したバーコードで検算してみます。

 お題はトンボの蛍光ペンです。
  バーコードは 4901991 64179 0 で13桁目が0になっています。
   奇数桁の合計=4+0+9+1+4+7=25
   偶数桁の合計=9+1+9+6+1+9=35
   27+35×3=130
   130÷10=13...0
   →よって13桁は0。
  バーコードの最終桁と一致していますよね。

さて、次は誤り検出だけでなく、その訂正まで行える方式です。
ハミング符号やリードソロモン符号などが代表的な誤り訂正方式です。

QRコードではリードソロモン符号を使っています。そのおかげで、QRコードの一部が汚れたり破れたりしても、誤り訂正して正しいURLにアクセスができるわけです。

こういった誤り訂正については、回線の品質が非常に低かった1950年代あたりに精力的に研究が行われました。

誤り訂正というと難しそうですが、その考え方は極めてシンプルです。
極端な例ですが、同じデータを3回送り、2つ以上が一致していればそれが正しい値だ、とするルールにしておけば、データがそこらじゅうで化けても正しい値を示せるという理屈です。

ですが、毎回3倍の通信を必要とするのはさすがにバカバカしい。
通信費用だって高いのだから、少しでも減らせないか?という工夫が「誤り訂正方式」の研究というわけです。
この誤り訂正は非常に興味深い話なのですが、かなり長くなりますので、別の機会にお話したいと思います。

まとめ

バーコードの発展型としてQRコードというものがあります。

今や、コード決済やサービスURLの提供などにも使われる日常的なものですが、最初は工場の工程管理用に開発されたものでした。

それを開発元のデンソーが無償公開した結果、様々な分野で利用されるようになり、今やQRコードの読み取り機能はスマホの標準機能となっています。

このQRコードも、バーコードと同様にリードエラーを防ぐ仕組みを持っているのですが、バーコードより新しい分、いろいろな付加機能を持っています。

QRコードは大きさによって、保持できる情報量を変えたり、汚れていて一部のコード読み込みができない場合でも補正して正しいコードを再計算するといった機能があります。

誤り訂正については、単にエラーの有無を検出するだけでなく、少数の間違いならそれを正しい値に訂正することまでできてしまいます。

こういった誤り訂正の機能はQRコードの発明ではなく、1950年代の数学分野の研究成果です。(QRコードではリードソロモン符号を利用しています)

今回は、QRコードの概要についてお話しました。
次回もお楽しみに。

(本稿は 2023年12月に作成しました)

このNoteは筆者が主宰するメルマガ「がんばりすぎないセキュリティ」からの転載です。
誰もが気になるセキュリティに関連するトピックを毎週月曜日の早朝に配信しています。
無料ですので、是非ご登録ください。
https://www.mag2.com/m/0001678731.html
また、公式サイトでも最新版を公開していますので、そちらもどうぞ。

https://www.egao-it.com/

この記事が気に入ったらサポートをしてみませんか?