🔎
JS で分割(連結)QR コード読み取り
分割 QR コードを扱う時に必要なのは以下の3つです。
- それが分割 QR コードであるかどうか
- 今読み込んだ QR コードは何個目なのか
- 分割された QR コードの総数
それらを取得するためのスニペットを紹介します。
まずは生のバイト列を取得する
使うライブラリによると思いますが、私は @zxing/library というものを使っていて、 getRawBytes() という関数を用いています。
result.getRawBytes()
それが分割 QR コードであるかどうか
QR コードが分割されている場合、最初のバイトが 0x3n (n に何個目の QR コードかを表す数字が入る)になります。
なので、これを使って次のようにすると分割されているかどうかが取得できます。
const isStructured = (firstByte & 0xf0) === 0x30
0xf0
を論理積を取ることによって下4 bit を 0 にしてから 0x30 と比較しています。
今読み込んだ QR コードは何個目なのか
先ほど言った通り最初のバイトの 0x3n の n の部分が何個目かを表しているので、上 4 bit の論理積を取って 0 にしてあげれば取得することができます。
const offset = firstByte & 0x0f
分割された QR コードの総数
総数は2個目のバイトの上4bitです。
なので 4bit ずらしてあげればOKです。+1 しているのは、この数が 0 始まりでカウントしているからです。
const total = (secondByte >> 4) + 1
Discussion