バーコードの13桁目は計算で出る。手打ちの間違いを、その場で検出できる

林のそばに張ったテントと焚き火の風景イラスト

商品マスタにJANコードを打ち込む。13桁。手で打つと、たまに間違える。

そして間違えたことに、あとで気づく。棚卸しが合わない、発注が届かない、請求と納品がずれる。

実は、13桁目は残り12桁から計算で出せる。つまり、打ち込んだ数字が正しいかどうかを、その場で確かめられる。

Excelの式1本で済む。知っていると、商品マスタの事故がかなり減る。

この記事は育ちます。公開後も、会話パート・トーク・補足を足していきます。
公開 2026-10-15 / 最終更新 2026-10-15(公開)

水深 — JANコードは、意味のある数字の並び

まず構造から。標準タイプのJANコードは13桁で、こう分かれている。

4 9 1 2 3 4 5 | 6 7 8 9 0 | 4

  • GS1事業者コード(先頭9桁または7桁)
  • 商品アイテムコード(残り)
  • チェックデジット(最後の1桁)

先頭の2桁は国コード(正確には「GS1プレフィックス」)で、日本は 45 か 49 が割り当てられている。

このコードは「どこで作られたか」ではなく「どこの国のGS1組織に登録した企業か」を表す。日本の会社が海外で作った商品にも49が付く。逆に、輸入品でも日本の会社が登録すれば49になる。

「49だから日本製」は誤り。 ここはよく誤解されている。

書籍は 978/979(ISBNから変換したもの)、雑誌は 491 で始まる。並んでいる数字を見るだけで、何のコードか見当がつく。

チェックデジットは、どう計算するか

本題。最後の1桁の出し方を書く。モジュラス10 ウェイト3という方式だ。

手順は4つ。

① 左から数えて偶数番目の数字を全部足して、3倍する

② 左から数えて奇数番目の数字を全部足す

③ ①と②を足す

④ その合計の一の位を、10から引く(一の位が0なら、チェックデジットは0)

やってみる。4 9 1 2 3 4 5 6 7 8 9 0 の12桁で計算する。

偶数番目(2,4,6,8,10,12番目)= 9, 2, 4, 6, 8, 0 → 合計 29 → ×3 = 87

奇数番目(1,3,5,7,9,11番目)= 4, 1, 3, 5, 7, 9 → 合計 29

87 + 29 = 116

一の位は 6。10 − 6 = 4

チェックデジットは 4。完成したJANコードは 4912345678904 になる。

林のそばに張ったテントと焚き火の風景イラスト

なぜこの計算で、間違いが見つかるのか

仕組みが分かると、何を検出できるかも分かる。

① 1文字の打ち間違い

どこか1桁を打ち間違えると、合計が変わる。合計が変われば一の位も変わり、チェックデジットが合わなくなる。

1桁の誤りは、必ず検出できる。

② 隣り合う2桁の入れ替え

「45」を「54」と打ってしまう。これも検出できる。偶数番目と奇数番目で重みが違う(3倍と1倍)ので、入れ替えると合計が変わるからだ。

ただし例外がある。差が5の組み合わせ(たとえば「05」と「50」、「16」と「61」)は、入れ替えても合計の一の位が変わらない。ここだけは検出できない。

③ 検出できないもの

  • 2か所を同時に間違えて、たまたま打ち消し合う場合
  • 桁数そのものを間違えた場合(これは長さのチェックで分かる)

完璧ではない。ただし、人間がやる間違いの大半は1文字か隣接の入れ替えなので、実用上はよく効く。

Excelで検算する式

A1に13桁のJANコードが文字列で入っているとする。正しいかどうかを判定する式を書く。

まず、12桁目までから計算する部分。

=10-MOD(SUMPRODUCT(MID(A1,ROW(INDIRECT(“1:12”)),1)*(MOD(ROW(INDIRECT(“1:12”)),2)*(-2)+3)),10)

少し長いので、考え方を分けて説明する。

  • MIDで1桁ずつ取り出す
  • 桁の位置が奇数なら重み1、偶数なら重み3
  • 掛けて合計する
  • 10で割った余りを10から引く

最後に、一の位が0のときの処理が要る。10から0を引くと10になってしまうので、もう一度MODをかける。

=MOD(10-MOD(合計,10),10)

この結果と、13桁目(=MID(A1,13,1))を比べる。一致すれば正しいコードになる。

式が長いので、作業列を使って分けて書くほうが実務的だと思う。

  • B列 偶数桁の合計
  • C列 奇数桁の合計
  • D列 チェックデジット
  • E列 13桁目と一致するか

分けて書けば、途中でおかしくなった場所も分かる。

前ゼロが消える問題

ここでもうひとつ、Excel特有の落とし穴がある。

JANコードを数値として入力すると、先頭の0が消える。

短縮タイプの8桁コードや、他のコード体系では先頭が0のことがある。「04912345」が「4912345」になってしまう。

さらに深刻なのは、13桁は有効桁数15桁の範囲内だが、14桁以上の集合包装用コードは崩れるということだ。GTIN-14やSSCC(18桁)を数値で持つと、末尾が0に化ける。

対策は前にも書いたとおり。コードは文字列で持つ。

  • セルの書式を先に「文字列」にする
  • CSVから読むときは、データタブから読み込んで列の型を文字列に指定する
  • 先頭にアポストロフィを付ける(見た目には出ない)

計算に使わない数字は、数字として持たない。 ここでも同じ話になる。

商品マスタで、実際にやること

実務に落とすと、こうなる。

① 取り込み時に、桁数をチェックする

=LEN(A1) が13(または8)でなければ、その時点で異常。

② チェックデジットを検算する

さきほどの式。合わなければ、打ち間違いか読み取りミス。

③ 重複をチェックする

=COUNTIF(A:A,A1) が2以上なら重複。同じJANが2つの商品に振られていたら、どちらかが間違っている。

④ 国コードを見る

先頭2桁が45/49でないものが混ざっていたら、輸入品か、別の体系のコードかもしれない。区別しておくと、あとで調べやすい。

この4つを取り込みのシートに入れておくだけで、マスタに間違ったコードが入る確率がかなり下がる。

夕方の海と小さな帆船の風景イラスト

他にもある、チェックデジット

同じ発想の仕組みは、身のまわりにたくさんある。

  • マイナンバー(12桁) 最後の1桁が検査用数字
  • 法人番号(13桁) 先頭の1桁が検査用数字。会社法人等番号12桁の前に付く
  • ISBN(13桁) JANと同じモジュラス10 ウェイト3
  • クレジットカード番号 Luhnアルゴリズム(別方式)
  • 郵便追跡番号 方式は事業者による

法人番号の検査用数字が先頭にあるのが面白い。JANは末尾、法人番号は先頭。位置が違うだけで、考え方は同じだ。

インボイス制度の登録番号は「T+法人番号13桁」なので、登録番号も同じ方法で検算できる。取引先マスタに登録番号を入れるとき、これが使える。

登録番号の検算は、実務で効く

もう少し踏み込む。インボイスの登録番号は、法人なら T+法人番号(13桁)、個人事業主なら T+13桁の数字(法人番号とは別に振られる)になる。

法人の場合、先頭の1桁が検査用数字で、残り12桁(会社法人等番号)から計算できる。

計算方法は国税庁が公表している。JANとは式が違うが、やっていることは同じだ。残りの数字から、決まった計算で1桁を導く。

請求書に書かれた登録番号を打ち込むとき、この検算を入れておくと、桁の写し間違いに気づける。

もっとも、国税庁の公表サイトで照会するのがいちばん確実だ。検算は「明らかな打ち間違いを弾く」ための一次フィルタとして使う。

バーコードが読めないとき

現場の話も少し。

バーコードリーダーが読まないとき、原因はたいてい次のどれかになる。

  • 印刷がかすれている バーの太さが変わると読めない
  • バーの左右の余白(クワイエットゾーン)が足りない 規格で幅が決まっている
  • 縮小しすぎている JANには推奨サイズの範囲がある
  • 反射している 光沢フィルムの上だと読み取りにくい
  • 色が薄い 赤いバーは読めない(赤色光を使うリーダーだと反射する)

とくに左右の余白は見落とされやすい。パッケージの端ぎりぎりにバーコードを置くと、読めなくなる。

自社でラベルを刷るなら、余白は仕様どおりに取る。ここをけちると、レジで止まる。

航路 — 数字が、自分の正しさを持っている

整理する。

  • JANコードの13桁目はチェックデジット。残り12桁から計算で出せる
  • 方式はモジュラス10 ウェイト3。偶数桁の合計×3 + 奇数桁の合計 → 一の位を10から引く
  • 1桁の打ち間違いは必ず検出できる。隣接の入れ替えもほぼ検出できる
  • 先頭2桁はGS1プレフィックス。日本は45/49。「49だから日本製」は誤り
  • コードは文字列で持つ。数値にすると前ゼロが消え、14桁以上は末尾が化ける
  • 法人番号、インボイスの登録番号、ISBNにも同じ発想の検査用数字がある

この仕組みのいいところは、照合相手がいらないことだと思う。

正しいかどうかを確かめるのに、マスタと突き合わせる必要がない。数字の中に、自分が正しいかどうかの情報が入っている。

伝票番号を自分で採番するなら、同じ仕組みを入れることもできる。1桁増やすだけで、打ち間違いが激減する。

13桁のうち、1桁を確認のために使う。12桁ぶんの情報のために、1桁を捨てている。その1桁が、現場の事故をずっと減らしている。

短縮タイプ(8桁)と、集合包装用(14桁)

13桁以外のコードも見ておく。

短縮タイプ(GTIN-8、8桁)

パッケージが小さくて13桁のバーコードが入らない商品に使う。ガムや小さい菓子など。

こちらもチェックデジットの計算方法は同じ。7桁に対して、モジュラス10 ウェイト3で8桁目を出す。

ただし事業者コードの桁数が違うので、13桁のコードから勝手に短縮版を作ることはできない。別に登録が必要になる。

集合包装用商品コード(GTIN-14、14桁)

ケースやボール(中間の包装単位)に付ける。13桁の頭にインジケータという1桁を足した形になる。

  • 1〜8 入数の違いを表す
  • 9 可変数量商品

段ボール1箱に何個入っているかを、この1桁で区別する。

経理から見ると、単品とケースで別のコードになるということが重要だ。在庫の単位が混ざると、棚卸しが合わなくなる。「1」が1個なのか1ケースなのか、コードで区別できる。

事業者コードの桁数が、時代で違う

もうひとつ、マスタを整備するときに引っかかる話。

GS1事業者コードの桁数は、時期によって違う。

  • 古くから登録している企業 7桁
  • 現在の標準 9桁
  • 商品数が少ない企業向け 10桁

7桁だと、商品に使える桁が5桁(10万通り)。9桁だと3桁(1,000通り)。10桁だと2桁(100通り)。

つまり、古い企業ほど、たくさんの商品コードを持てる。

これが何を意味するかというと、コードの何桁目までが企業を表すのか、見ただけでは分からないということだ。「先頭9桁が企業コード」と決め打ちして切り出すと、7桁企業のときにずれる。

企業を特定したいなら、GS1のデータベースで照会する。自分で切り出さない。

自社で採番するコードに、検査用数字を入れる

社内の伝票番号や管理番号を自分で決めているなら、同じ仕組みを入れられる。

やり方は単純で、

  • 番号を決める(例:6桁)
  • モジュラス10 ウェイト3で7桁目を計算する
  • 7桁で1つの番号として扱う

これだけで、打ち間違いがその場で分かるようになる。

入力用のシートに検算の式を入れておけば、間違った番号を打った瞬間に赤くなる。

デメリットは、桁が1つ増えることと、人が暗算できないこと。番号を口頭で伝えるとき、1桁多く言うことになる。

件数が多くて、打ち込む機会が多い番号にだけ入れる。全部に入れる必要はない。

バーコードを、自分で作る

最後に、印刷側の話も。

自社商品にJANを付けるには、GS1 Japanに登録して事業者コードを取得する必要がある。これは有料で、3年ごとの更新になる。

勝手に数字を決めて印刷すると、他社のコードと衝突する。レジで違う商品として読まれる。

社内在庫の管理用で、外に出ないものであれば、Code39やCode128といった別の体系を使う手もある。こちらは登録が要らない。英数字が使えるので、伝票番号をそのままバーコードにできる。

Excelでバーコードを作るには、バーコード用のフォントを入れるのがいちばん手軽だと思う。文字を打つと、バーの形で表示される。

ただし、読み取り精度は印刷品質に左右される。現物で読めるか、必ず試す。画面で見えていても、印刷して読めないことがある。


朝もやのかかった針葉樹林の風景イラスト

この記事は、まだ書きかけです

この記事は、公開してから足していく形にしています。調べたことを書いた本文がまず先にあって、あとから「聞き手と話し手の会話」「あとで思い出したこと」「読んだ人から教わった補足」が積もっていきます。

だから、同じURLでも半年後には別のものになっているはずです。もし一度読んだことがある記事なら、下の更新ログだけ見てください。増えたところが分かります。

更新ログ

  • 2026-10-15 公開(本文のみ。会話パートはこれから足します)