スマホカメラによる読み取りでは照合処理以外はちょっと怖い話
私はバーコードに関するもの中心に個人でAndroidアプリを開発しています。スマホのカメラや、スマホにペアリング接続したBluetoothバーコードリーダーでバーコードを読み取り、その情報を処理するアプリです。
バーコードを読んで行う代表的な処理
照合処理
照合処理はバーコードとバーコードが一致するかどうかをチェックする処理です。バーコード全体ではなく、その一部同士での照合も可能です。
主に作業のミスを防ぐために使用されています。例えば、与薬指示用紙に印刷されたバーコードと、患者さんのリストバンドバーコードが同じ、つまり与薬しようとしている薬と人が正しいかのチェックみたいな使い方です。
その他にも、お客さんの注文一覧データを、スマホ内に取り込んでおいて、出荷しようとしている全ての商品を読み取って、全ての商品が間違いなく揃っているかを照合するような使い方もあります。
データ収集処理
バーコードを読み取って、数量を入力。何が何個あるのかを登録します。登録した情報は、販売管理や在庫管理システムへインポートされ、帳簿の情報との差異を調べたりします。
商品を取り扱うところでは、棚卸という作業が必ず必要となり、実地棚卸として、このデータ収集という作業が行われます。「月末は棚卸のためお休みします」という張り紙があるお店を見たことがあると思いますが、その時にこの実地棚卸というのを大人数でやっています。
他にも入荷した全ての商品を読み取っておけば、あとから、商品がいつ入荷されたか(されていないか)どうか調べることができます。また、使った商品を読み取っておけば、何をいつ何個使ったかがあとから調べることができます。
運送屋さんがピピっとやっているのも、これに該当します。いつ何をどこで集荷して、配達したのか、データ収集しているわけです。
カメラ読み取りの欠点
読み取り速度
バーコードリーダーを使った読み取り速度と、スマホの読み取り速度を比べると、いまだに差があります。Androidのバージョンがアップし、カメラの性能もかなりアップしており、QRコードの読み取りはそれほど差はありませんが、普通のバーコードについては、やはりバーコードリーダーよりは若干遅く感じます。
値化け
バーコードというのは、幅の広いバーと狭いバーの組み合わせ方によって値が表現されています。スマホのカメラは本来バーコードを読み取るためのものではないため、バーコードの印字品質や外光の具体によって、バーコードのバー幅をぶれて認識してしまい、値化けしてしまう現象が発生します。例えば、"12345"という値を持つバーコードが"8232"みたいに全く違う値として認識されたりすることがあります。
値化けについては、バーコードの仕組みの一つとしてチェックデジットというものがあります。バーコードの値を元に規則にのっとって計算した値を一番後ろに付加します。読み取った後に、同じ計算をして、その計算結果が合致すれば正しく読み取れたと判断できるわけです。
例えば、全ての桁の数値を足した結果を算出し、さらにそれの10の余りを出すという規則にするとします。1と2と3と4と5を足すと、15になります。15を10で割ると、余り5です。ですので、"12345"という値を表現したいときは、"123455"というバーコードを作成します。
このチェックデジットは、バーコードを作る人が計算結果を付け加えてから、バーコード化するのですが、バーコードにはいろいろな種類があり、チェックデジットを標準で持っているものもあります。
怖いところ
照合だったらいいと思うんですよ。同じものを照合しようとしても値化けして照合NGとなるだけなんで。値化けがあることを知っていれば、もう一度照合すればいいんですよね。
違うものが照合OKとなったら大問題なんですが、一致していないものが一致しているように値化けするなんて確率はほぼ0とみなしていいでしょう。
でも、データ収集だと、あるべきものが収集できなくて、無いものが収集できてしまう。これは大問題ですよね。
ですので、データ収集の場合は、カメラではなくて、Bluetooth(SPP)のバーコードリーダーを使って収集していただくことをお奨めします。読み取りスピードも速いので、作業もはかどると思います。
どうしてもカメラでやるとしたら、すくなくとも、チェックデジットは採用しておきたいところですし、読み取るバーコードの種類は限定しておいたほうがよいと思います。
Androidスマホによるバーコード照合やデータ収集に興味がある方は、「すいすい」のサイトを訪れてみてください。
すいすい - バーコードによる照合・棚卸・ピッキング・出荷検品アプリ