複雑で読み取りづらいQRコードを超シンプルに作り替える方法

GIGAZINE



QRコードはウェブサイトへのリンクや電子マネー決済などの用途で広く利用されていますが、「複雑なQRコードが小さく印刷されていて読み取れない!」といった経験をしたことがある人は多いはず。そんな「複雑で読み取りづらいQRコード」を「シンプルで読み取りやすいQRコード」に作り替える方法を、プログラミング言語「Swift」や「Rust」の開発に参加してきたフオン・ウィルソン氏が解説しています。

Mechanical sympathy for QR codes: making NSW check-in better | Huon on the internet
https://huonw.github.io/blog/2021/10/nsw-covid-qr/

ウィルソン氏が暮らしているオーストラリア・ニューサウスウェールズ州では、レストランや小売店などにパンデミック対策の行動追跡用QRコードが掲示されています。しかし、ニューサウスウェールズ州から配布される「QRコードやQRコードの使用法が記されたファイル」をA4コピー用紙に印刷した場合、QRコードのサイズは約5cm×5cmほどになり、QRコードの複雑さと相まって読み取りが難しくなってしまうとのこと。このことに不満を持ったウィルソン氏はQRコードの読み取りを容易にする方法を自身のウェブサイトで公開しました。


まず、ウィルソン氏は「今すぐ実行可能な解決方法」として「QRコードを大きく印刷する」という方法を挙げています。ニューサウスウェールズ州から配布されるファイルでは用紙の面積の大部分を「QRコードの読み取り方法とサービスアプリの使い方の説明」に費やしていますが、QRコード施策が始まってから既に長い日時が経過しているため、説明欄は小さくしてしまっても問題ないとのことです。


ウィルソン氏によると、問題のQRコードには「https://www.service.nsw.gov.au/campaign/service-nsw-mobile-app?data=eyJ0IjoiY292aWQxOV9idXNpbmVzcyIsImJpZCI6IjEyMTMyMSIsImJuYW1lIjoiVGVzdCBOU1cgR292ZXJubWVudCBRUiBjb2RlIiwiYmFkZHJlc3MiOiJCdXNpbmVzcyBhZGRyZXNzIGdvZXMgaGVyZSAifQ==」のような長いURLが格納されており、このURLが短くなるほどQRコードをシンプルな模様にできるとのこと。そこで、ウィルソン氏はURLに含まれた情報を保ちつつ簡略化する方法を以下の5ステップに分けて解説しています。

◆ステップ1:誤り訂正能力を下げる
◆ステップ2:不要な情報を削除する
◆ステップ3:エンコード形式を変える
◆ステップ4:パスやドメインを省略する
◆ステップ5:オフラインサポートを削除

◆ステップ1:誤り訂正能力を下げる
QRコードには、コードの一部が汚れたり破損したりしても正しいデータを表せるようにする「誤り訂正機能」が備わっています。この誤り訂正機能には能力が高い順に「レベルH」「レベルQ」「レベルM」「レベルL」の4段階の能力が用意されており、能力を下げるほどQRコードを簡略化できます。ウィルソン氏は、問題のQRコードが店のガラス張りの内側などの読み取りエラーが発生しやすい環境に掲示されることを考慮して、誤り訂正能力とQRコードのシンプルさのバランスから「レベルQ」の誤り訂正を選択しました。


◆ステップ2:不要な情報を削除する
QRコードに格納されているURL「「https://www.service.nsw.gov.au/campaign/service-nsw-mobile-app?data=eyJ0IjoiY292aWQxOV9idXNpbmVzcyIsImJpZCI6IjEyMTMyMSIsImJuYW1lIjoiVGVzdCBOU1cgR292ZXJubWVudCBRUiBjb2RlIiwiYmFkZHJlc3MiOiJCdXNpbmVzcyBhZGRyZXNzIGdvZXMgaGVyZSAifQ==」は以下のような部品に分かれています。

スキーム「https://」
ドメイン「www.service.nsw.gov.au」
パス「campaign/service-nsw-mobile-app」
クエリ「data=eyJ0IjoiY292aW(中略)yZSAifQ==」

これらの部品のうち、クエリはJSON形式で記述されたデータをBase64でエンコードしたもので、Base64でデコードすると以下のようなJSONファイルが現れます。

{
“t”:”covid19_business”,
“bid”:”121321″,
“bname”:”Test NSW Government QR code”,
“baddress”:”Business address goes here “
}


ウィルソン氏によると、上記のJSONファイルのうちQRコードを掲示している企業の住所を示す以下の部分は実際のサービスでは使われていないとのこと。

“baddress”:”Business address goes here “


使われていない部分を削除してBase64で再度エンコードするとURLが短くなり、以下のようにQRコードも簡略化されます。


◆ステップ3:エンコード形式を変える
QRコードには数字だけを扱える「数字データモード」や数字に加えて大文字のアルファベットやいくつかの記号を扱える「英数字データモード」、任意のデータを扱える「8ビットバイトデータモード」、漢字を扱える「漢字データモード」およびそれらを組み合わせて扱える「混合モード」が用意されており、「数字データモード」「英数字データモード」「8ビットバイトデータモード」「漢字データモード」の順に1文字当たりのビット数が大きくなります。QRコードを簡略化するにはビット数を小さく保つ必要があるため、ウィルソン氏は「英数字データモード」と「8ビットバイトデータモード」の混合モードを採用し、URLを可能な限り大文字のアルファベットで記述することにしました。

URLの部品のうち、スキームとドメインは大文字と小文字が区別されないため、大文字で記述できます。また、パスは管理者が自由に決定できるため、大文字で記述可能です。これを適用すると、URLは以下のようになります。

HTTPS://WWW.SERVICE.NSW.GOV.AU/CAMPAIGN/SERVICE-NSW-MOBILE-APP?DATA=eyJ0IjoiY292aWQxOV9idXNpbmVzcyIsImJpZCI6IjEyMTMyMSIsImJuYW1lIjoiVGVzdCBOU1cgR292ZXJubWVudCBRUiBjb2RlIn0=


上述の通り、クエリには以下のJSONファイルが格納されています。

{
“t”:”covid19_business”,
“bid”:”121321″,
“bname”:”Test NSW Government QR code”
}


ウィルソン氏は、JSONファイルに含まれる「{」「}」「”」「:」「,」といった記号やBase64へのエンコードによる文字列の伸長がデータサイズの増加を引き起こしていると指摘し、JSONファイルに含まれる情報を直接URLに含ませる手法を採用することにしました。

HTTPS://WWW.SERVICE.NSW.GOV.AU/CAMPAIGN/SERVICE-NSW-MOBILE-APP/121321/Test+NSW+Government+QR+code


これにより、QRコードは以下のように簡略化されました。


◆ステップ4:パスやドメインを省略する
URLのパス「SERVICE-NSW-MOBILE-APP」は管理者が任意の文字列に設定可能です。例えばパスを「C」というアルファベット一文字にすると、QRコードは以下のように簡略化されます。


同様に、ドメイン「WWW.SERVICE.NSW.GOV.AU」もより短いドメインに変更できます。。ウィルソン氏はURLの信頼性を確保するために.govドメインは欠かせないと述べ、「S.NSW.GOV.AU」をドメインとして採用。URLは以下のようになりました。

HTTPS://S.NSW.GOV.AU/C/121321/Test+NSW+Government+QR+code


これをQRコードに表すとこんな感じ(better domain)。オリジナルの複雑なQRコード(original)を情報を保ったままシンプルなQRコードに作り替えることができました。


◆ステップ5:オフラインサポートを削除
完成したURLにはQRコードを掲示している企業の名称を示す部分(今回のURLでは「Test+NSW+Government+QR+code」)が含まれています。ウィルソン氏によると、この部分はユーザーがQRコードをスキャンした際にスマートフォンなどの画面に企業名を表示する役割を担っているとのこと。ニューサウスウェールズ州が市民を追跡管理するには企業のID(今回のURLでは「121321」)さえ分かればいいため、「ユーザーのデバイスに企業名を表示する」という機能を削除すればURLを以下のように短縮できます。

HTTPS://S.NSW.GOV.AU/C/121321


これによって、QRコードは以下のように非常にシンプルな模様となります。


上記のようにニューサウスウェールズ州が提供するQRコードは、情報を保ったまま読み取りが容易なQRコードに作り替えられます。また、ウィルソン氏によるとニューサウスウェールズ州のQRコードは暗号化されていないため容易に追跡サービスをだますことができるとのこと。これらのことからウィルソン氏は、ニューサウスウェールズ州は適切な技術を用いるべきだったと主張しています。

なお、ソーシャルニュースサイト・Hacker Newsにはウィルソン氏が作成したQRコードをさらに簡略化する方法について議論されていますが、そのためには誤り訂正能力を下げる必要があるとのことです。

この記事のタイトルとURLをコピーする

Source

タイトルとURLをコピーしました