- バーコードのチェックデジット計算式を完全網羅|Code39・JAN・Excel対応まとめ解説
- バーコードのチェックデジットとは?仕組みと役割をわかりやすく解説
- チェックデジット計算式の基本ルール|重み付けと余りの考え方
- 13桁バーコード(JAN・EAN-13)のチェックデジット計算式と手順
- 8桁バーコード(短縮JAN・EAN-8)のチェックデジット計算式と手順
- 12桁バーコード(UPC)のチェックデジットの考え方
- Code39のチェックデジットとは|任意だけど付けると強い理由
- Code39 文字対応表(0〜42)|この表が計算の土台になる
- Excelでチェックデジットを自動計算する(コピペOK関数テンプレ)
- ExcelでCode39チェックデジットを自動計算する(対応表方式)
- AccessでCode39チェックデジットを扱うときの考え方(実務のコツ)
- チェックデジット計算でよくある間違いとトラブル対策
- まとめ|チェックデジット計算式を理解すればバーコード管理が正確になる
バーコードのチェックデジット計算式を完全網羅|Code39・JAN・Excel対応まとめ解説
結論から言うと、バーコードに含まれるチェックデジットは「読み取りミスを検出するための確認用の数字(または文字)」であり、決められた計算式に従えば誰でも正しく求められます。
JAN/EANのような数字バーコードでは「重み付け(ウェイト)→合計→10の余り」で決まり、Code39のような英数字バーコードでは「文字を数値に変換→合計→43の余り」でチェック文字が決まります。
手計算の理解はトラブル切り分けに強く、実務ではExcelのテンプレを作れば大量データを自動で判定でき、業務効率と信頼性が上がります。
本記事では、チェックデジットの役割、計算式の基本、JAN/EAN(13桁・8桁)、UPC(12桁の考え方)、Code39(文字対応表つき)を「理解→実務で使える」順に整理し、最後にコピペOKのExcel関数テンプレをまとめて掲載します。
バーコードのチェックデジットとは?仕組みと役割をわかりやすく解説
チェックデジットは「末尾の確認用1文字」|数字だけでなく英数字の場合もある
チェックデジットとは、バーコードの末尾に付ける「確認用の1文字(多くは1桁の数字、規格によっては英数字)」です。
この1文字は、データ本体(先頭側の数字や文字列)をもとに、規格で決められた計算ルールで導き出されます。
たとえばJAN/EANのような数字バーコードでは末尾が1桁の数字になり、Code39のように英数字を扱う規格では末尾が英字や記号になることもあります。
ここで大事なのは、チェックデジットは「適当に付け足した飾り」ではなく、データ本体と必ず整合するように計算で作られた検証用の文字だという点です。
つまり、末尾の1文字は“意味のある結果”であり、データ本体が変わればチェックデジットも変わります。
逆に言えば、末尾の1文字が合わない場合は、どこかで誤りが起きている可能性が高いと判断できます。
読み取り側は「再計算して一致するか」を確認している|誤読をエラーとして弾ける
読み取った側(レジ、ハンディターミナル、業務システムなど)は、読み取ったデータ本体から同じ計算ルールでチェックデジットを“再計算”し、
末尾に付いているチェックデジットと一致するかどうかを比較します。
一致すれば「読み取りは正しい可能性が高い」と判断され、一致しなければエラーとして扱われます。
バーコードの読み取りは、現場では意外と“揺らぎ”があります。
たとえば汚れ、かすれ、反射、印字のにじみ、ラベルのしわ、貼り付け位置のズレ、読み取り角度などで、
バーの太さや間隔が正しく読めないことがあります。
このとき、もしチェックデジットがなければ、誤読されたデータがそのまま処理され、商品や在庫がズレる原因になります。
チェックデジットがあることで、誤読を“通さない”仕組みが作れるわけです。
現場では「事故を減らす安全装置」|誤登録・誤出荷・誤請求を防ぐ
バーコードはレジ、入出庫、棚卸、製造、医療などで毎日のように大量に読み取られます。
もし一文字でも読み違えたまま処理されると、商品違い・数量違い・誤出荷・誤請求などにつながります。
このような事故は、あとから発覚すると調査や修正に時間がかかり、取引先対応や再作業が発生することも少なくありません。
チェックデジットは、こうした事故を減らすための「最後のブレーキ」として機能します。
特に、バーコードを読み取る回数が多い現場ほど、チェックデジットの価値は大きくなります。
人が丁寧に作業していても、忙しい時間帯ほど“うっかり”は増えやすいので、
仕組みとしてミスを止められることが重要です。
手入力の場面でも強い|目視入力ミスの検出に役立つ
バーコードは本来スキャンして使うものですが、現場によっては番号を人が手で入力する場面もあります。
たとえば、バーコードが破れて読めない、印字が薄い、端末が一時的に使えない、などの理由で、
番号を見ながら入力して登録することがあります。
このときチェックデジットがあると、入力された番号が正しいかどうかをシステム側が判定しやすくなり、
入力ミスをその場で発見できる確率が上がります。
いわゆる二重チェックとして機能するため、手入力が混ざる運用ほどチェックデジットの恩恵を受けやすいです。
チェックデジットは万能ではないが「よくあるミス」には強い|採用される理由
ただしチェックデジットは万能ではありません。
規格にもよりますが、多くは「よくある入力ミス・誤読」を高確率で検出できる一方で、
理論上はすり抜ける組み合わせもあり得ます。
つまり、チェックデジットが一致したからといって、絶対に正しいと断言できるわけではありません。
それでも実務の誤読やミスを大きく減らせるため、JAN/EANなど多くの国際規格で標準的に採用されています。
現場目線で言えば、チェックデジットは「完璧を保証する魔法」ではなく、
事故の確率を現実的に下げるための仕組みです。
この考え方を押さえておくと、トラブル時に「何を疑うべきか」「どこまで信用してよいか」の判断がしやすくなります。
チェックデジット計算式の基本ルール|重み付けと余りの考え方
すべてのチェックデジットは「掛け算して足す」から始まる
チェックデジットの計算式は、JAN/EAN、UPC、Code39など規格ごとに細かい違いはありますが、
考え方の土台はほぼ共通しています。
まず行うのは、データ本体を1桁(または1文字)ずつ取り出し、それぞれに決められた重み(ウェイト)を掛けることです。
この重みとは「その桁をどれくらい強く計算に反映させるか」を示す係数のようなものです。
たとえばJAN/EANでは「1」や「3」が使われ、Code39では文字ごとに割り当てられた数値そのものが重みの役割を果たします。
すべての桁(または文字)に対して掛け算を行い、その結果をすべて足し合わせた合計値を作るところまでが第一ステップです。
初心者の方はここで「なぜわざわざ重みを掛けるのか?」と疑問に思うかもしれませんが、
これは誤読が起きたときに合計値が大きくズレやすくなるよう設計されているためです。
単純な足し算よりも検出力が高くなり、ミスを見つけやすくなります。
合計値を「割って余りを見る」ことでチェックデジットが決まる
すべての桁(または文字)に重みを掛けて合計したら、次に行うのが基準値で割って余りを求める処理です。
この基準値は規格によって異なり、JAN/EANやUPCでは「10」、Code39では「43」が使われます。
たとえば合計値が「127」で基準値が「10」なら、127 ÷ 10 の余りは「7」になります。
この余りをもとに「次の10の倍数との差」を取ったり、そのまま余りを使ったりして、
最後のチェックデジットが決まります。
この仕組みによって、どこか1桁でも誤読や入力ミスがあると、
合計値が変わり、余りも変わり、チェックデジットが一致しなくなります。
つまり余りのズレがエラー検出のカギになっているのです。
「重み付け+余り」はミスを検出しやすくするための工夫
もし単純に「すべての数字を足して末尾に付ける」だけだと、
一部の入れ替わりや誤読で合計が変わらないケースが起きやすくなります。
そこで、桁ごとに重みを変えたり、余り計算を組み合わせることで、
よくあるミスほど検出されやすい構造にしています。
たとえば「3」と「8」が入れ替わった場合や、「1」が「7」と誤読された場合でも、
重みが違えば合計値のズレが大きくなり、チェックデジットが一致しなくなります。
この工夫こそが、チェックデジットが実務で強力な理由です。
「どこから数えるか」で混乱しやすいが、本質は同じ
初心者が最も混乱しやすいポイントが「左から数えるのか、右から数えるのか」です。
たとえば13桁のJAN/EANでは、説明資料によって
「左から奇数位置・偶数位置で重みを変える」
「右から数えて重みを付ける」
と書かれていることがあります。
これは見た目の説明方法が違うだけで、最終的な計算結果は同じになるよう定義されています。
補足(ここが誤解防止の重要ポイント):
JAN/EANの重み付けは「右端から数える」説明が多いのですが、EAN-13は計算対象が必ず12桁、EAN-8は計算対象が必ず7桁と固定なので、
「左から交互に 1・3(または3・1)を掛ける」形に置き換えても、結果が一致します。
本記事では理解とExcel化のしやすさを優先し、“左から数える”前提で統一して説明します。
まずは「重みを掛けて足す→余りを見る」と覚えるだけで十分
初心者の方が最初から細かい数式まで覚える必要はありません。
まずはチェックデジットの本質として、
- 各桁(文字)に決められた重みを掛ける
- 全部足し算する
- 基準値で割って余りを見る
- その結果がチェックデジットになる
この流れだけ理解しておけば十分です。
あとは規格ごとの「重み」と「基準値」を当てはめるだけで、
JAN/EANでもCode39でも仕組みがスッと理解できるようになります。
13桁バーコード(JAN・EAN-13)のチェックデジット計算式と手順
EAN-13は「先頭12桁から末尾1桁を作る」仕組み
13桁のJAN/EAN(EAN-13)は、末尾の1桁がチェックデジットになっています。
つまり、バーコードに印字されている13桁のうち、実際に計算に使うのは先頭12桁のみです。
最後の1桁は、その12桁が正しく読めているかを確認するために、計算によって追加されています。
初心者の方がまず押さえるポイントは、
「13桁すべてを使って計算するのではなく、チェックデジットは結果として付け足される」
という点です。
ここを勘違いすると、計算しても合わなくなってしまいます。
重みの付け方はシンプル|左から1・3・1・3と交互に掛ける
EAN-13では、左から数えて、
奇数位置(1桁目・3桁目・5桁目…)には重み1、
偶数位置(2桁目・4桁目・6桁目…)には重み3
を掛けていきます。
つまり、計算の並びは「1、3、1、3、1、3…」と交互になります。
たとえば先頭12桁が「4 9 0 1 2 3 4 5 6 7 8 9」のように並んでいた場合、
1桁目の4には1を掛け、2桁目の9には3を掛け、3桁目の0には1を掛け、
という形で順番に処理していきます。
この作業を12桁分すべて行い、その結果を合計します。
ここで重要なのは、計算対象が「先頭12桁」だという点です。
13桁目(末尾)は“答え”なので、計算に入れるとズレます。
合計から「次の10の倍数」を作るとチェックデジットになる
すべての桁に重みを掛けて合計したら、その合計を10で割って余りを求めます。
次に、その余りを次の10の倍数に到達させるために必要な数を計算します。
この数がチェックデジットです。
たとえば合計が「83」なら、次の10の倍数は「90」なので、
90 − 83 = 7 がチェックデジットになります。
もし合計がすでに「80」「90」「100」のように10の倍数なら、
余りは0になり、チェックデジットも0になります。
この考え方を式でまとめると、
(10 −(合計 mod 10)) mod 10
という形になりますが、初心者のうちは「次の10の倍数との差を取る」と覚える方が直感的です。
簡単な例で流れをイメージしてみよう
たとえば先頭12桁が「123456789012」だったとします。
左から重みを掛けると、
- 1×1、2×3、3×1、4×3、5×1、6×3、7×1、8×3、9×1、0×3、1×1、2×3
これらをすべて足し算し、その合計を10で割って余りを求め、
次の10の倍数との差を取れば、チェックデジットが決まります。
実際の現場では手計算することは少ないですが、
この流れを頭の中でイメージできるようになると、
「末尾の数字が明らかにおかしくないか」を感覚的に判断できるようになります。
目視確認やトラブル対応で大きな武器になる知識
実務では、バーコードがうまく読めないときに番号を目で確認する場面がよくあります。
その際、チェックデジットのルールを知っていると、
「ラベルの印字が間違っているのか」「読み取り機の問題か」「入力ミスか」を切り分けやすくなります。
単にシステム任せにするよりも、
仕組みを理解している人が現場にいるだけでトラブル解決が速くなるため、
EAN-13の計算ルールはバーコード業務に関わる人にとって非常に実用的な知識です。
8桁バーコード(短縮JAN・EAN-8)のチェックデジット計算式と手順
EAN-8も末尾1桁がチェックデジット|計算は先頭7桁だけを使う
8桁バーコード(EAN-8/短縮JAN)も、末尾の1桁がチェックデジットになっています。
そのため、実際に計算に使うのは先頭7桁のみです。
13桁と同じく、最後の1桁は結果として付け足される確認用の数字であり、
計算対象に含めてはいけません。
初心者の方は「8桁すべてで計算する」と思い込みやすいですが、
チェックデジットはあくまで検証用に追加される桁です。
この点を最初に理解しておくと、計算ミスを防げます。
13桁と重みが逆になるのが最大の注意点
短縮JAN(EAN-8)が混乱しやすい最大の理由は、
13桁バーコードと重みの付け方が逆になることです。
左から数えて、
奇数位置(1桁目・3桁目・5桁目・7桁目)は重み3、
偶数位置(2桁目・4桁目・6桁目)は重み1
を掛けます。
つまり並びは「3、1、3、1、3、1、3」となります。
13桁では「1、3、1、3…」だったのに対し、
8桁ではスタートが3になるのがポイントです。
ここを取り違えると、正しいチェックデジットになりません。
合計からチェックデジットを作る流れは13桁と同じ
すべての桁に重みを掛けて合計したら、
その合計を10で割った余りを求め、
次の10の倍数との差を取ります。
この差がチェックデジットになります。
たとえば合計が「46」なら次の10の倍数は「50」なので、
50 − 46 = 4 がチェックデジットになります。
もし合計がちょうど10の倍数なら、チェックデジットは0です。
計算の考え方そのものは13桁とまったく同じなので、
違うのは重みの並びだけと覚えると理解しやすくなります。
短縮JANは誤読リスクが高いからこそチェックが重要
短縮JAN(EAN-8)は、ガム、キャンディ、化粧品の小型容器、
文房具、試供品など、スペースが限られた商品に多く使われます。
バーコード自体が小さく印字されるため、
かすれや汚れ、印刷ムラの影響を受けやすいという特徴があります。
そのため、EAN-8ではチェックデジットの役割が特に重要になります。
誤読されたデータがそのまま登録されるのを防ぐ最後の防波堤として機能します。
よくある入力トラブル|先頭ゼロと桁数不足に注意
短縮JANで非常によく起きるトラブルが、
先頭の0が消えてしまうケースです。
Excelやシステムによっては、数値として扱われると
「01234567」が「1234567」のように7桁になってしまうことがあります。
これにより、
「桁数が足りない」「計算しても合わない」「システムで弾かれる」
といった問題が発生します。
対策としては、バーコード番号を文字列として扱う、
入力時に桁数のチェックを入れるなどが有効です。
短縮JANを扱う場合は、
まず桁数が7桁+チェックデジット1桁になっているか
を確認する習慣を付けるだけでもトラブルは大きく減ります。
12桁バーコード(UPC)のチェックデジットの考え方
UPCも末尾1桁がチェックデジット|構造はJAN・EANとほぼ同じ
UPC(Universal Product Code)は、主に北米で使われている12桁のバーコード規格です。
このUPCでも、末尾の1桁がチェックデジットとして機能しており、
先頭側の数字から計算して正しさを確認する仕組みになっています。
計算の基本思想はJAN/EANと非常に近く、
重み付けをして合計し、10の余りを使ってチェックデジットを決めます。
そのため、EAN-13の仕組みを理解していれば、
UPCのチェックデジットもスムーズに理解できます。
UPCは「EAN-13の先頭に0を付けた形」として扱われることがある
実務の現場では、UPCはしばしばEAN-13の先頭に0を付けた13桁形式(またはGTINとしての表現)として扱われることがあります。
たとえばUPCが「123456789012」の場合、
運用上は「0123456789012」のように先頭に0を補って13桁相当として管理されるケースがあります。
ただしこれは「必ずそうなる」という意味ではなく、
POSやマスタ仕様、取引先の受け入れ形式によって取り回しが変わるという点が重要です。
運用ルールを決めないと混乱しやすい|12桁のままか13桁変換か
初心者がつまずきやすいのが、
「UPCを12桁としてそのまま扱うのか」
「先頭に0を付けて13桁相当として扱うのか」
が現場によって異なる点です。
取引先システムによっては12桁での登録が必須だったり、
別のシステムでは13桁相当でなければ受け付けなかったりします。
このルールがあいまいなままだと、
バーコードが読めない、マスタ登録できない、
データが重複する、といったトラブルが発生しやすくなります。
Excelや入力チェックは運用ルールに合わせて設計する
UPCを扱う場合は、
自社システムが12桁UPCとして管理するのか、13桁相当に統一するのか
を最初に決めておくことが非常に重要です。
ルールが決まったら、Excelテンプレや入力フォームもそれに合わせます。
たとえば、
12桁運用なら「必ず12桁で入力されているか」をチェックし、
13桁相当運用なら「先頭0を付けて13桁相当に変換する処理」を自動化します。
このように桁数と形式を先に統一しておくことで、
現場での混乱や入力ミスを大幅に減らすことができます。
チェックデジットはその確認の最後の仕上げとして使うと、
非常に効果的です。
初心者は「EANと同じ考え方」と覚えるだけで十分
UPCのチェックデジットは、細かい違いよりも
「基本はJAN/EANと同じ構造」と覚えてしまって問題ありません。
まずは、
重みを掛けて合計し、10の余りで末尾を決める
という流れを理解し、
桁数の扱いだけ運用ルールに注意する。
これだけ押さえておけば、UPC対応で困ることはほとんどなくなります。
Code39のチェックデジットとは|任意だけど付けると強い理由
Code39は英数字を扱える業務用バーコード|現場コード管理で多用される
Code39は、数字だけでなく英大文字(A〜Z)やいくつかの記号も扱える業務用バーコード規格です。
JANやEANのような商品コード向けというより、
部品管理、棚札、製造工程管理、医療器材管理、資産管理など、
「英数字の管理番号」を扱いたい場面でよく使われます。
たとえば「PARTA1023」「LOTB-55」「TOOL99」など、
文字と数字が混ざったコードをそのままバーコード化できるのがCode39の大きな強みです。
そのため、物流や製造の現場では非常に採用率が高い規格となっています。
チェックデジットは必須ではないが、付ける価値は非常に高い
Code39のチェックデジットは、JAN/EANと違って必須ではなく任意です。
規格としては「付けなくても良い」設計になっていますが、
実務ではチェックデジットを付けて運用する現場が多く存在します。
その理由は、英数字が混ざるコードは人の入力ミスや誤読が起きやすいからです。
数字だけなら桁数感覚で違和感に気づきやすいですが、
「O(オー)」と「0(ゼロ)」の見間違い、
「I(アイ)」と「1(いち)」の混同、
記号の見落としなどが頻発します。
こうしたミスは、忙しい現場ほど増えやすくなります。
チェックデジットを付けておけば、
こうした誤りをシステム側で弾けるため、
現場のヒューマンエラーに対する強力なブレーキになります。
Code39のチェックデジットは「モジュロ43」で決まる
一般的に使われているCode39のチェックデジット方式は、
モジュロ43(Modulo 43)と呼ばれる仕組みです。
考え方はとてもシンプルで、流れは次の4ステップだけです。
- データを1文字ずつ取り出す
- 各文字を対応する数値(0〜42)に変換する
- すべて足し算する
- 合計を43で割った余りを出す
この余り(0〜42)に対応する文字が、そのままチェックデジットになります。
つまり、Code39では「余り=チェック文字」という非常に分かりやすい構造になっています。
「文字を数値に変換する表」が計算の土台になる
Code39の特徴は、まず文字をいったん数値に置き換えるところにあります。
数字の0〜9だけでなく、A〜Zや記号にもそれぞれ固有の値が割り当てられています。
この対応表さえ用意してしまえば、
計算自体は「足して割るだけ」なのでとても簡単です。
Excelで自動計算するときも、この対応表を作るのが最初のステップになります。
アスタリスクは見た目用|計算には含めないのが基本
Code39では、バーコードの開始と終了を示すために
「*(アスタリスク)」が使われます。
そのため、資料や印字イメージでは
「*ABC123*」のような表記を目にすることがあります。
しかしこのアスタリスクは制御用の記号であり、
通常はデータ本体には含めず、チェックデジット計算にも含めません。
計算対象はあくまで「ABC123」の部分だけです。
ここを含めてしまうとチェックデジットがズレてしまうため、
初心者が最初につまずきやすいポイントでもあります。
「見た目にあっても計算しない」と覚えておくと安心です。
Code39にチェックデジットを付けるだけで信頼性が一段上がる
Code39はチェックデジットなしでも動きますが、
付けることで誤読・誤入力の検出力が大きく向上します。
特に英数字コードを大量に扱う現場では、
チェックデジットの有無でデータ品質が大きく変わります。
「任意だから不要」と考えるよりも、
安全性を高めるために付けるものと考えた方が実務では合理的です。
一度仕組みを作ってしまえば、Excelやシステムで自動計算できるため、
運用コストもほとんど増えません。
Code39 文字対応表(0〜42)|この表が計算の土台になる
Code39では「文字をいったん数値に変換する」ことが最大の特徴
Code39のチェックデジット計算で最も重要なのが、
文字をそのまま足すのではなく、必ず数値に置き換えるという考え方です。
数字の0〜9だけでなく、英大文字や記号にもそれぞれ決まった値が割り当てられています。
この対応表があることで、
「英字や記号を含むコードでも数学的に処理できる」仕組みになっています。
つまり、この表こそがCode39チェックデジット計算の基盤(ルールブック)になります。
Excelでは別シートに対応表を作るのが一番安全で確実
実務でCode39のチェックデジットをExcelで自動計算する場合は、
この対応表を別シートにそのまま作成して参照する方法が最も安定します。
たとえば「Code39Map」などの名前のシートを作り、
A列に文字、B列に値を入力しておけば、
XLOOKUPやVLOOKUPで簡単に数値変換ができます。
この方法なら、関数が長くなってもロジックが崩れにくく、
後から見返したときにも仕組みが理解しやすくなります。
スペース(空白文字)は特にミスしやすいので要注意
対応表の中でも初心者が特につまずきやすいのが、
スペース(空白文字)の扱いです。
Code39ではスペースも正式な1文字として扱われ、値は「38」に割り当てられています。
見た目では何も表示されないため、
「存在しているのに見えない文字」としてトラブルの原因になりがちです。
Excelに表を作る際は、備考列を作って「SPACE」と書いておいたり、
セルの背景色を変えて目立たせたりすると安全です。
この対応表を覚える必要はない|参照して使えば十分
初心者の方がこの表を暗記する必要はまったくありません。
実務では、表を作って参照するだけで十分です。
大切なのは、
「Code39では文字ごとに数値が決まっていて、それを使って計算する」
という考え方を理解することです。
一度対応表を作ってしまえば、
チェックデジット計算はほぼ自動化できるようになります。
対応表が正しければ計算結果も必ず正しくなる
Code39のチェックデジット計算は、
対応表の値が正しく設定されていれば、
あとは足し算と余り計算だけです。
もし計算結果が合わない場合は、
ほとんどのケースで
「文字対応表が間違っている」
「対応表にない文字を使っている」
「アスタリスクを含めて計算している」
のいずれかが原因です。
まずはこの対応表が正しく作れているかを確認することが、
トラブル解決の近道になります。
| 文字 | 値 |
|---|---|
| 0 | 0 |
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 5 | 5 |
| 6 | 6 |
| 7 | 7 |
| 8 | 8 |
| 9 | 9 |
| A | 10 |
| B | 11 |
| C | 12 |
| D | 13 |
| E | 14 |
| F | 15 |
| G | 16 |
| H | 17 |
| I | 18 |
| J | 19 |
| K | 20 |
| L | 21 |
| M | 22 |
| N | 23 |
| O | 24 |
| P | 25 |
| Q | 26 |
| R | 27 |
| S | 28 |
| T | 29 |
| U | 30 |
| V | 31 |
| W | 32 |
| X | 33 |
| Y | 34 |
| Z | 35 |
| – | 36 |
| . | 37 |
| (スペース) | 38 |
| $ | 39 |
| / | 40 |
| + | 41 |
| % | 42 |
Excelでチェックデジットを自動計算する(コピペOK関数テンプレ)
まず結論|Excelで自動化すると「桁数ミス・重みミス」がほぼ消える
ここでは「そのまま貼って使える」ことを最優先に、Excel関数テンプレを掲載します。
チェックデジット計算は、慣れないうちは手計算だと桁の数え間違いや重みの掛け間違いが起きやすいです。
だからこそ、Excelで自動化すると「ミスが起きにくい仕組み」になり、現場の事故防止につながります。
JAN/EAN(数字だけ)と、Code39(英数字+記号)では計算ルールが違うので分けて解説します。
なお、ここで使うLETやSEQUENCEはMicrosoft 365系のExcelで使える関数です。
古いExcelの場合は、列を分けてMIDで1桁ずつ取り出して合計する方式にすると確実です。
【重要】Excelは先頭0を消しやすい|バーコード番号は“文字列”で扱うのが必須
ここが初心者が一番つまずくポイントです。Excelは数値として入力すると、先頭の0を自動的に消すことがあります。
たとえば本来「01234567」として扱うべき番号が「1234567」になってしまうと、桁数がズレて計算も検証も全部ズレます。
対策:
- セルの表示形式を「文字列」にしてから入力する
- 取り込みデータはCSVでも「文字列扱い」で読み込む
- 必要ならTEXT関数で桁数を固定する(例:TEXT(A2,”000000000000″)など)
この一手間だけで、チェックデジット関連の事故は大きく減ります。
「計算式が合わない」と感じたら、まず関数より先に先頭0と桁数を疑うのが鉄則です。
使う前に確認|「A2に何桁を入れるか」を固定するとトラブルが減る
Excel自動計算で一番大切なのは、入力ルールを固定することです。
たとえば13桁JAN/EANなら、A2には「先頭12桁だけ」を入れる、というルールにします。
8桁(短縮JAN/EAN-8)なら、A2には「先頭7桁だけ」を入れる、というルールにします。
「A2に13桁全部を入れたり、12桁だけを入れたり、入力がバラバラ」
という状態になると、関数が正しくても結果がズレてしまいます。
なので、まずは入力は必ず“チェックデジット除外”で入れる、と決めるのがおすすめです。
JAN・EAN(13桁)のチェックデジットをExcelで求める(EAN-13 / JAN-13)
前提:セルA2に「先頭12桁(チェックデジット除く)」が入っている想定です。
例:490123456789(12桁)
13桁JAN/EANは、最後の1桁がチェックデジットです。
だから計算では、まず先頭12桁を1桁ずつ取り出して重みを掛けて合計します。
Excelだと、MIDで1桁ずつ取り出し、SUMPRODUCTでまとめて掛け算・足し算ができます。
チェックデジット(1桁)を返す関数(A2が12桁の場合)
=LET(s,A2, pos,SEQUENCE(LEN(s)), d,--MID(s,pos,1), w,IF(MOD(pos,2)=1,1,3), MOD(10-MOD(SUMPRODUCT(d*w),10),10) )
ポイント:
・13桁は「奇数位置×1、偶数位置×3(左から数える)」が基本です。
・最後は「10で割った余り」を使って0〜9の1桁に整えます。
初心者が混乱しがちな点は「どっちが3だっけ?」という部分です。
このテンプレでは左から数えて奇数が1、偶数が3に固定しています。
だから、途中で「右から数える説明」と混ざらないので安心です。
12桁+チェックデジットを結合して13桁を作る(A2が12桁の場合)
=LET(base,A2, cd,LET(s,base,pos,SEQUENCE(LEN(s)),d,--MID(s,pos,1),w,IF(MOD(pos,2)=1,1,3),MOD(10-MOD(SUMPRODUCT(d*w),10),10)), base&cd )
実務のコツ|「計算結果が合わない」ときは桁数と文字種を先に疑う
- 入力が本当に12桁になっているか(11桁や13桁になっていないか)
- 数字以外の文字(スペース、ハイフン、全角数字)が混ざっていないか
- 先頭の0が消えて桁がズレていないか
特に全角数字は見た目では分かりにくいので、コピー元によっては混ざることがあります。
JAN(8桁)のチェックデジットをExcelで求める(EAN-8 / 短縮JAN)
前提:セルA2に「先頭7桁(チェックデジット除く)」が入っている想定です。
例:4901234(7桁)
8桁(短縮JAN/EAN-8)も、最後の1桁がチェックデジットです。
計算対象は先頭7桁になります。
そして最大の注意点は、13桁と重みのスタートが違うことです。
ここを取り違えると、計算が必ずズレます。
チェックデジット(1桁)を返す関数(A2が7桁の場合)
=LET(s,A2, pos,SEQUENCE(LEN(s)), d,--MID(s,pos,1), w,IF(MOD(pos,2)=1,3,1), MOD(10-MOD(SUMPRODUCT(d*w),10),10) )
ポイント:
・8桁は「奇数位置×3、偶数位置×1(左から数える)」が基本です。
・13桁と重みのスタートが違うので、ここが混乱ポイントです。
初心者の方は、ここを「8桁は3から始まる」と覚えると迷いにくいです。
短縮JANは小型商品で使われることが多く、印字が小さいぶん、
読み取りエラーが起きやすいので、チェックデジット確認の価値が高いです。
補足|古いExcelの場合は「列を分けて」同じことをやればOK
LETやSEQUENCEが使えないExcelでも、やっていることは同じです。
たとえばB列でMID(A2,1,1)、C列でMID(A2,2,1)…のように1桁ずつ取り出し、
別の列で重みを掛け、最後に合計→余り→チェックデジット、という流れにすれば再現できます。
最初は面倒に見えますが、一度テンプレを作ればコピペで量産できるので、
古い環境の現場でも十分運用できます。
ExcelでCode39チェックデジットを自動計算する(対応表方式)
まず結論|Code39は「文字→数値」に変換してから計算するので、対応表方式が一番安全
Code39は英数字や記号を扱えるバーコードなので、JAN/EANのように「数字をそのまま計算」できません。
そこで必要になるのが「各文字を0〜42の数値に置き換える」という考え方です。
この置き換えをミスなくやるために、Excelでは対応表(マッピング表)を別シートに作って参照する方法が最も実務向きです。
やることはシンプルで、流れは次の通りです。
① 文字列を1文字ずつ分解 → ② 対応表で値に変換 → ③ 合計 → ④ 43で割った余り → ⑤ 余りを文字に戻す
初心者がつまずくポイント|「*(アスタリスク)」は見た目用で、計算対象にしない
Code39はスタート/ストップ記号として「*」が使われることが多く、見かけ上「*ABC123*」のように表記されることがあります。
ただし通常、これはバーコードの枠(開始・終了)を示すための記号であり、データ本体の計算には含めません。
そのためExcelでは、入力データに「*」が含まれていても大丈夫なように、SUBSTITUTEで「*」を消してから計算する形にしておくと安心です。
(現場で「*付きで渡される」「*なしで渡される」が混在しても壊れにくい仕組みになります)
ステップ①:対応表シートを作る
- Code39!A2:A44 … 文字(0〜9、A〜Z、記号、スペース)
- Code39!B2:B44 … 値(0〜42)
前提:A2にCode39のデータ(例:ABC123 または *ABC123*)が入っている場合
チェックデジット(1文字)を返す(アスタリスク除去込み)
=LET(raw,A2, text,SUBSTITUTE(raw,"*",""), chars,MID(text,SEQUENCE(LEN(text)),1), vals,XLOOKUP(chars,Code39!$A$2:$A$44,Code39!$B$2:$B$44), r,MOD(SUM(vals),43), XLOOKUP(r,Code39!$B$2:$B$44,Code39!$A$2:$A$44) )
エラーを分かりやすく表示する(任意)
=IFERROR( LET(raw,A2, text,SUBSTITUTE(raw,"*",""), chars,MID(text,SEQUENCE(LEN(text)),1), vals,XLOOKUP(chars,Code39!$A$2:$A$44,Code39!$B$2:$B$44), r,MOD(SUM(vals),43), XLOOKUP(r,Code39!$B$2:$B$44,Code39!$A$2:$A$44) ), "文字対応表にない文字が含まれています(小文字・全角・未対応記号など)" )
元データ+チェック文字を結合して返す
=LET(raw,A2, text,SUBSTITUTE(raw,"*",""), cd,LET(chars,MID(text,SEQUENCE(LEN(text)),1), vals,XLOOKUP(chars,Code39!$A$2:$A$44,Code39!$B$2:$B$44), r,MOD(SUM(vals),43), XLOOKUP(r,Code39!$B$2:$B$44,Code39!$A$2:$A$44) ), text&cd )
よくある原因|小文字・全角・ハイフンの種類違い
現場で多いのは、たとえば「a(小文字)」が混ざる、数字が全角になる、「-(全角ハイフン)」が入る、などです。
見た目が似ていても別の文字扱いになるので、対応表に無いとエラーになります。
ルールとして、入力は英大文字に統一、記号も半角の – . $ / + % とスペースのみにする、と決めると安定します。
運用のコツ|「*を付ける/付けない」は印字側のルールに合わせて固定する
Code39はバーコード表示上、スタート/ストップとして*が必要になるケースがありますが、
それを「データとして持つか」「印字フォントや印字ソフト側で自動付与するか」は現場の環境で変わります。
おすすめは、Excel側ではデータ本体(*なし)で管理し、印字側の設定で必要なら*を付ける運用です。
そうすると「データの中に余計な記号が混ざる」事故を減らせます。
AccessでCode39チェックデジットを扱うときの考え方(実務のコツ)
基本発想はExcelと同じ|「対応表を作って数値化→余り→逆引き」
AccessでCode39のチェックデジットを扱う場合も、考え方はExcelとまったく同じです。
ポイントは、文字を直接計算しようとしないことです。
必ず「文字→数値」に変換するための対応表(マッピングテーブル)を作り、
その数値を合計してMOD43を取り、余りを再び文字に戻します。
たとえばCode39Mapというテーブルを作り、次のようなフィールド構成にすると分かりやすくなります。
- Char:Code39の文字(0〜9、A〜Z、記号、スペース)
- Val:対応する数値(0〜42)
このテーブルがあれば、あとはどんな処理でも「数値に変換→計算→逆変換」が可能になります。
クエリだけでやろうとすると複雑化しやすい理由
Accessのクエリは集計や結合は得意ですが、
文字列を1文字ずつ分解する処理は少し苦手です。
SUBSTRINGのような関数を組み合わせれば可能ですが、
SQLが長くなり、後から見た人が理解しづらくなりがちです。
現場でよくある失敗は、
「クエリだけで無理に全部やろうとして、保守できない仕組みになる」ことです。
一度動いても、仕様変更や例外対応が入った瞬間に壊れやすくなります。
実務で安定しやすい方法|VBA関数を1つ作って呼び出す
Accessでは、VBAでCode39用チェックデジット計算関数を1つ作ってしまい、
クエリやフォームからその関数を呼び出す方式が非常に安定します。
たとえば、
「文字列を受け取る → 1文字ずつ処理 → 対応表で値取得 → 合計 → MOD43 → 文字返却」
という流れをVBAにまとめてしまえば、
SQLはシンプルになり、ロジックの見通しも良くなります。
これにより、
・クエリが読みにくくならない
・処理ミスが起きにくい
・後から仕様を変えやすい
というメリットがあります。
チェックデジット以前にやるべき「入口チェック」が品質を守る
Accessでマスタ登録やデータ入力をする運用では、
チェックデジット計算よりも先に入力ルールの検証を入れることが非常に重要です。
たとえば次のようなチェックをフォーム側で行うと、事故が激減します。
- 文字数が想定通りか(短すぎる・長すぎるデータを弾く)
- 対応表にない文字が含まれていないか
- 全角文字や小文字が混ざっていないか
- 不要なスペースや記号が入っていないか
これらを入口で止めておけば、
チェックデジット計算は「最終確認」として軽く通すだけで済みます。
設計のコツ|チェックデジットは“検証”、入力ルールは“防止”に使う
実務で一番安定する設計は、
入力ルールでミスを防ぎ、チェックデジットで漏れを検出するという役割分担です。
いきなりチェックデジットだけに頼ると、
桁数違い・文字種違いなどの初歩的ミスが大量に通過してしまいます。
一方で、入口チェックと組み合わせると、
データ品質がほぼ自動で保たれる状態になります。
Accessは業務データの“心臓部”になることが多いので、
チェックデジットは単なる計算処理ではなく、
データを守る仕組みの一部として設計する意識が重要です。
チェックデジット計算でよくある間違いとトラブル対策
トラブルの大半は「桁数」と「入力ルール」で決まる
チェックデジット関連のトラブルは、実はかなりパターン化しています。
多くの現場では「計算式が難しいから起きる」のではなく、
入力の前提条件がズレていることが原因です。
まず最も多いのが桁数の間違いです。
たとえば次のようなケースは非常によく起きます。
- 13桁JANのはずが、チェックデジットを含めず12桁しか入力していない(またはその逆)
- 短縮JAN(8桁)のつもりが、先頭7桁のまま処理している
- 先頭の0が消えてしまい、本来より1桁短くなっている
- コピー時に前後のスペースが混ざり、桁数がズレている
特に先頭0はExcelやシステムで自動的に消えることがあるため、
初心者だけでなく経験者でも頻繁に引っかかります。
桁数チェックを最初に入れるだけで、これらの事故は大幅に減らせます。
次に多いのが「重み付けの方向ミス」
JAN/EANでは、13桁と8桁で重みのスタートが逆になります。
ここを同じ式で処理してしまうと、必ずチェックデジットがズレます。
現場でよくあるのは、
「13桁用のExcelテンプレをそのまま8桁に使ってしまう」
というパターンです。
対策としては、
13桁専用テンプレ、8桁専用テンプレを分けて作るのが一番安全です。
「桁数が違えばシートも違う」と割り切ることで、人為ミスがほぼ消えます。
Code39特有のミス|文字種と記号の扱いが最大の落とし穴
Code39で多いトラブルは、計算以前の文字ルール違反です。
代表的なものは次の通りです。
- 小文字(a〜z)が混ざる
- 全角数字や全角アルファベットが混ざる
- 対応表にない記号(@、#、カンマなど)が入る
- スペースを意図せず含めてしまう
- アスタリスクをデータ本体として計算してしまう
見た目ではほぼ同じでも、システム上は別文字扱いになるため、
チェックデジットが合わない、エラーが出る、といった原因になります。
最強の対策は「自動化+入口チェック+検証」
チェックデジットトラブルをほぼゼロに近づける方法は、
人に考えさせない仕組みを作ることです。
具体的には次の3点を組み合わせるのが理想です。
- Excelテンプレで自動計算する(手計算をしない)
- 入力時に桁数・文字種をチェックする
- 代表的な正解データで事前検証しておく
たとえば、
「このJANを入れたらこのチェックデジットになる」
「このCode39を入れたらこの結果になる」
というサンプルを数件用意しておけば、
テンプレやシステム変更時もすぐに動作確認できます。
トラブルが起きたときの切り分け順序を決めておくと強い
もしチェックデジットが合わないときは、次の順で確認すると原因を早く特定できます。
- 桁数は正しいか(先頭0含めて合っているか)
- 数字・文字が全角になっていないか
- 重みのルールを間違えていないか(13桁と8桁で逆)
- Code39なら対応表にない文字がないか
- アスタリスクを計算対象にしていないか
この順番で見るだけで、ほとんどのトラブルは数分で解決できます。
チェックデジットは「難しい計算」ではなく、
ルールを守って入力すれば自然と正しくなる仕組みです。
だからこそ、仕組み化と入口チェックを組み合わせることが、
現場を一番ラクにし、事故を防ぐ近道になります。
まとめ|チェックデジット計算式を理解すればバーコード管理が正確になる
チェックデジットは、バーコードが正しく読み取られているかを瞬時に確認するための信頼性を支える中核技術です。
JAN/EAN(13桁・8桁)では、各桁に重みを掛けた合計と10の余りによって確認数字が決まり、
Code39では文字を数値に置き換えて合計し、43で割った余りからチェック文字が導き出されます。
どちらも考え方はシンプルですが、この仕組みがあることで現場の誤読や入力ミスが大幅に減らされています。
計算ルールを理解しておけば、
「なぜこの番号がエラーになるのか」
「どこでズレているのか」
を論理的に切り分けられるようになり、トラブル対応のスピードが格段に上がります。
さらにExcelテンプレを活用すれば、数件だけでなく何百件・何千件のデータでも一瞬でチェック可能になり、
目視確認や手計算に頼る必要はほぼなくなります。
知識がまったくなくても、本記事の関数テンプレや対応表をそのまま使えば、
「入力して結果を見る」だけのシンプル運用からすぐに始められます。
まずは手元にあるバーコード番号をいくつか入れて試してみることで、
チェックデジットの仕組みと便利さを実感できるはずです。
正しい計算式と自動化を味方につければ、バーコード管理は驚くほど正確でラクになります。

コメント