バーコード読み取り — JAN/EAN/UPC/CODE128/CODE39/ITF/Codabar
**1 次元バーコード** (JAN-13 / EAN-13、JAN-8 / EAN-8、UPC-A、UPC-E、Code 128、Code 39、ITF / Interleaved 2 of 5、Codabar) の画像をアップロードすると、テキスト値と検出フォーマットを表示。商品の JAN コード読み取り、輸送ラベルの追跡番号確認、出荷物の検品など定番用途に。**Apache 2.0 ライセンスの @zxing/library** を使用してすべてブラウザ内で処理します。複数画像をまとめて読ませる一括モード対応。**QR コードは別ツール (qr-decode) を使ってください**。
使い方
**バーコード画像** (JPG / PNG / WebP / GIF / BMP) をドラッグ&ドロップ または クリックでアップロードすると、各画像から **値 + 検出フォーマット** を抽出して表示。複数画像をまとめて入れた場合は **CSV 一括コピー** で `filename,format,value` の表をクリップボードへ取り出せます。対応フォーマットは **JAN-13 / EAN-13、JAN-8 / EAN-8、UPC-A、UPC-E、Code 128、Code 39、ITF (Interleaved 2 of 5)、Codabar** の 8 形式。**QR コードは別ツール** (`qr-decode`) を使ってください。デコードは **Apache 2.0 ライセンスの @zxing/library** を使ってブラウザ内で完結。スマホで撮ったレシートの JAN、配送伝票の追跡番号、倉庫の検品リストなどでの活用を想定。
詳細解説
バーコードが乗った画像には、商品の内訳から個人識別子まで含まれる
バーコードは「モノの識別子」として設計されていますが、実際にデコードされる値は用途ごとに大きく異なります。スーパーのレシートに印刷された JAN-13 は購入商品の明細そのものです。配送伝票の追跡番号 (Code 128) は荷受人の住所・氏名と紐付いた個人特定可能な情報です。病院・図書館・社員証に使われる Codabar / Code 39 は患者 ID・貸出番号・社員番号を含みます。倉庫検品用の ITF-14 は在庫構成を示すサプライチェーン情報です。複数の画像を一括処理する場合、その CSV 出力には多数の識別子が集約されます。
スマートフォンで撮影した画像ファイルには EXIF メタデータ (撮影位置・日時) が埋め込まれていることもあります。バーコード値に加え、撮影コンテキストの情報も画像に含まれるため、「バーコードの読み取り画像」を外部サービスにアップロードすることは複数の機微情報を同時に渡すことになりえます。
バーコード画像をオンラインデコーダーに上げるとどうなるか
オンラインのバーコードデコードサービスは、画像をサーバーへ送信してデコード結果を返します。画像本体がサーバーに届くと、EXIF 含む元データが残ります。さらにバーコード値は画像を解析した結果としてサーバー側ログに記録されることがあります。「追跡番号を読み取りたかっただけ」でも、荷受人情報と紐付いた Code 128 値を外部サーバーに渡したことになります。
また、大量の画像を一括でアップロードするバッチ処理的な使い方をしたとき、顧客リストに近い量の個人識別子が一度のリクエストで外部へ出る可能性があります。利用規約で「送信データをサービス品質向上のために利用する権利を持つ」と定めているサービスでは、これらの値が学習データや統計として活用されるかもしれません。
@zxing/library による完全ブラウザ内デコード
本ツールは Apache 2.0 ライセンスの @zxing/library を npm パッケージとして取り込み、Canvas API で画像ピクセルを読み取ってブラウザ内でデコード処理を行います。ZXing (Zebra Crossing) はバーコード処理ライブラリとして広く知られたオープンソースプロジェクトで、JAN / EAN / UPC / Code 128 / Code 39 / ITF / Codabar の各フォーマットをカバーします。ピクセルデータをブラウザのメモリ上で処理するため、画像ファイルも、そこから読み取ったバーコード値も、いずれも外部サーバーへは送信されません。
DevTools の Network タブを開いた状態で画像をドロップしても、ページ初期ロード以降のリクエストは発生しません。複数ファイルの一括処理でも同様で、CSV エクスポートもブラウザのクリップボード API を使ってローカルで生成されます。
商品管理・物流・医療現場でのローカル活用
バーコードを読み取る現場の多くは、情報が機微なほど外部送信を避けたい状況です。倉庫・医療・図書館など、識別子に個人情報や業務上の秘密が紐付いている場面では特に、ブラウザ完結ツールの優位性が明確です。本ツールはインストール不要、オフライン環境 (ブラウザのキャッシュがあれば) でも動作するため、専用スキャナが手元にないシチュエーションでの補助ツールとして活用できます。
バーコード規格別の構造とチェックディジット検証
1 次元バーコードのフォーマットはそれぞれ符号化方式と桁構造が異なります。JAN-13 / EAN-13 は ISO/IEC 15420 で定義された 13 桁の数字コードで、先頭 2-3 桁が国コード (45 / 49 は日本、00-13 は米国・カナダ)、続く 4-5 桁がメーカーコード、残りが商品コード、最終 1 桁がモジュロ 10 のチェックディジットです。@zxing/library はチェックディジットを自動で再計算し、不一致なら読み取り結果を破棄します。これによって誤検出を抑えつつ、印刷品質が悪いラベルでも高い信頼性で値を取り出せます。
Code 128 は ISO/IEC 15417 で定義されたバリアブル長フォーマットで、Code Set A (大文字 + 制御文字) / B (フルアスキー) / C (2 桁ずつ数字) を Start / Code Switch キャラクタで切り替えながら効率的に符号化します。輸送ラベルでは Code Set C で偶数桁の追跡番号を半分の幅で印刷する設計が一般的です。Code 39 (ANSI MH10.8M) は英大文字・数字・少数の記号のみで、各文字を 9 個のバー (うち 3 個が太い) で表現します。ITF (Interleaved 2 of 5) は ISO/IEC 16390 で定義されたペアエンコーディングで、必ず偶数桁の数字のみを扱います。Codabar (NW-7) は伝統的に図書館や血液バッグの識別に使われ、Start/Stop キャラクタを A B C D から選択する独特の構造を持ちます。
画像認識フェーズの工夫と読み取り失敗の典型パターン
ZXing は画像を Canvas のグレースケールピクセル配列に変換し、ハイブリッド二値化 (Hybrid Binarizer) でバーと空白の境界を判定します。続いて Run-Length Encoding 風の幅シーケンスを抽出し、各フォーマットの「Finder Pattern」(EAN-13 のガードバー、Code 128 の Start キャラクタ等) を検出して読み取り方向を確定します。回転 90° / 180° の画像でも 4 方向すべてをスキャンするため、撮影向きを気にせず処理できます。ただし極端な歪み・反射・モアレが発生した画像ではバイナリゼーション段階で失敗するため、撮影時のフラッシュ反射を避ける・斜めから撮らないという基本が読み取り成功率に直結します。
実運用で読み取り失敗の原因として頻出するのは、(1) JAN-13 と JAN-8 を混同して 8 桁のラベルを 13 桁モードで読ませる、(2) Code 128 と Code 39 の判別を手動で固定して別フォーマットの画像を渡す、(3) 印刷の擦れでガードバーの片側が欠けている、(4) ITF の偶数桁制約を満たさない奇数桁の数字列が記録されている、の 4 パターンです。本ツールはフォーマット自動判定モードを既定にしているため (1)(2) は回避できますが、(3)(4) は元の印刷品質の問題なのでリプリントが必要になります。読み取った値を別のラベル印刷に流用したい場合は barcode-generate で同じ 1 次元規格を再エンコードでき、対象が QR コードの画像なら qr-decode が 2 次元側のデコードを同じ Apache 2.0 の ZXing ライブラリで担当します。
よくある質問
- 入力データはサーバーに送信されますか?
- いいえ。すべてブラウザ内で完結します。**@zxing/library** で JavaScript デコードを実行し、Canvas API で画像を読み取るだけで、外部 API や CDN への通信はありません。
- 対応バーコード形式は?
- **1 次元バーコード 8 形式**: JAN-13 / EAN-13 (日本 / ヨーロッパの商品コード)、JAN-8 / EAN-8 (短縮版)、UPC-A / UPC-E (アメリカ商品コード)、Code 128 (英数字対応・物流ラベル)、Code 39 (英数字対応・工業)、ITF / Interleaved 2 of 5 (段ボール ITF-14)、Codabar (旧式・ライブラリ管理)。**QR コードは別ツール** `qr-decode` で対応 (アルゴリズムが大きく違うため別実装)。
- JAN コードと EAN コードの違いは?
- **JAN (Japanese Article Number)** と **EAN (European Article Number)** は **完全に同じ規格** で、規格名のローカル呼称が違うだけ。先頭 2 桁が国コードで、49 / 45 から始まるのが日本 (= JAN コードと呼ぶ)、それ以外の国コード (40-44 = ドイツ、500-509 = イギリス etc) が EAN コードと呼ばれます。**チェックディジット** (末尾 1 桁) のアルゴリズムも同じ Modulo 10。本ツールでは検出した時に GTIN-13 / GTIN-8 と表示します。
- Code 128 と Code 39 の違いは?
- **Code 39** は古い規格で **大文字英字 + 数字 + 7 記号** (A-Z, 0-9, - . space $ / + %) のみ。短くて分かりやすいが文字種が少ない。**Code 128** は新しい規格で **全 ASCII (128 文字)** に対応、副セット A/B/C 切替で高密度。物流ラベル・配送伝票・梱包箱の追跡番号は Code 128 が定番。Code 39 はチェックディジット任意、Code 128 は必須。
- 認識率を上げるコツは?
- **画像のコントラスト** を高くする (白背景に黒バー)、**バーコードを画像の中央に大きく** 写す、**斜め角度より正面** から撮る、**ピントが合っている** こと、**画像解像度** は最低 200×200 px 程度欲しい。スマホで撮影した画像は **トリミングしてバーコード周辺だけ** にすると認識率が上がります。
- なぜ「バーコードが検出されません」のエラーが出ますか?
- (1) 画像にバーコードが映っていない、(2) **画質が低すぎる** / ピンボケ、(3) **角度が斜めすぎる** (45 度以上は厳しい)、(4) バーコードが **小さすぎる** (画像の 20% 未満は要トリミング)、(5) **対応していない形式** (QR コード、Data Matrix、PDF417 は対応外 — QR は qr-decode へ)。エラー時は CTA で qr-decode への切替を案内。
- チェックディジットは検証されますか?
- **@zxing/library のデコード時に自動検証** されます。JAN/EAN/UPC は Modulo 10 のチェックディジットを内蔵しており、不整合だと検出自体が失敗します。Code 128 / Code 39 / ITF / Codabar はそれぞれ独自のチェックがあり、ライブラリが処理。**チェックディジット欄** は 8 形式中 7 形式で自動検証成功時 ✓ を表示。
- 複数画像を一度に読ませても OK?
- **OK**。ドラッグ&ドロップで複数ファイル選択、または + ボタンでファイルピッカー (multiple)。各画像を順次デコードしてリスト表示。エラー画像はステータスバッジで分かりやすく。**CSV コピーボタン** で `filename,format,value` の表をクリップボードに出力可能 (Excel / Google Sheets に貼り付け OK)。
- ファイル形式 / サイズの制限は?
- **JPG / PNG / WebP / GIF / BMP** の標準形式に対応 (HEIC は heic-convert で JPG に変換してから)。**1 ファイル最大 30 MB**。スマホ写真 (3-10 MB 程度) なら問題なし。アニメーション GIF は 1 フレーム目のみ読みます。
「送らない」を確かめるには
このツールは入力データを外部に送信しません。仕組み・監査手順・運営方針は以下で詳しく説明しています。
類似のツール
バーコード生成 — JAN / EAN / UPC / CODE128 / CODE39
数字や文字列を 1 次元バーコード (JAN-13 / EAN-13・JAN-8 / EAN-8・UPC-A・CODE128・CODE39・ITF・Codabar/NW-7・MSI) に変換し、PNG / SVG として保存できます。バーの太さ・高さ・色・余白や、下部の数字表示の有無を細かく調整可能。チェックディジットの検証も自動で行います。生成はすべてブラウザ内で完結し、入力した値が外部に送信されることはありません。
QR コード読み取り — 画像から URL / テキストを抽出
QR コードが写った画像 (PNG / JPG / WebP / GIF) をドロップすると、ブラウザ内で内容を読み取ってテキストや URL を抽出します。URL・メール (mailto)・電話 (tel)・SMS・Wi-Fi 接続情報・地理座標 (geo)・vCard / vEvent などの種類を自動判別し、結果をワンクリックでコピーできます。複数画像をまとめて読み取ることも可能。デコードはすべて端末内で完結し、画像も読み取り結果も外部サーバーには一切送信されません。
QR コード生成 — テキスト / URL / ロゴ画像入り
テキストや URL を QR コード (PNG / SVG) に変換します。サイズ・誤り訂正レベル・前景色 / 背景色を細かく指定でき、中央にロゴ画像 (PNG / JPG / SVG) を重ねることも可能。ロゴを乗せる場合は誤り訂正レベル H 推奨。生成と画像合成はすべてブラウザ内で完結し、入力テキストもアップロードしたロゴも外部に送信されません。
Base32 / Base58 エンコード・デコード
テキストを Base32 (RFC 4648 / TOTP 2FA シークレット) と Base58 (Bitcoin アドレス) で相互変換します。方式 (Base32 / Base58) と方向 (エンコード / デコード) を切り替え可能。UTF-8 バイト列ベースで日本語・絵文字も往復。すべてブラウザ内で処理されます。