CODE39とは

CODE39とは、数字と英大文字、そして一部の記号を表現できるバーコードの規格です。1974年に登場した比較的古い方式で、工業、物流、社内資産管理、医療、図書といった分野で長く使われてきました。商品流通用のJANコードのように数字だけに限定されないため、「A-1204」「RACK-B-03」のように英字混じりの管理番号をそのまま印字できるのが最大の利点です。

JANコードとの決定的な違いは、番号の発行に外部の登録が要らないことです。JANコードはGS1事業者コードの貸与を受けなければ商品に付けられませんが、CODE39は自社で決めた番号をそのままバーコードにできます。社内の備品台帳、倉庫のロケーション表示、作業指示書、検体ラベルなど、外部に流通しない番号を扱う場面で選ばれるのはこのためです。

一方で弱点もあります。1文字あたりのバー本数が多いため、同じ桁数ならCODE128より横幅が長くなります。桁数の多い番号を狭いラベルへ入れたい場合は不利です。また使える文字が43種類に限られており、英小文字やアンダースコア、カンマを含む番号はそのまま表現できません。運用を始める前に、実際に印字する番号がこの43文字の範囲に収まるかを必ず確認してください。

CODE39で使える43文字

基本文字は次の43種類です。

種類文字個数
数字0 1 2 3 4 5 6 7 8 910
英大文字A 〜 Z26
記号−(ハイフン) .(ピリオド) スペース $ / + %7

合計43文字。裏を返せば、英小文字・アンダースコア(_)・カンマ(,)・丸括弧・コロン・アットマーク・日本語は基本文字として扱えません。「ABC_001」のようにアンダースコアを含む資産番号を運用している場合は、ハイフンに置き換えるか、CODE128へ切り替える判断が必要になります。

本ツールでは、入力された英小文字をまず大文字へ正規化してから、43文字の範囲に収まっているかを検証します。実際の挙動は次のとおりです。

入力例処理理由
abc-001ABC-001へ正規化小文字を大文字化
ABC-001そのまま生成許可された文字のみ
ABC_001エラーアンダースコアは対象外
ABC,0012列目として解釈カンマは列の区切り文字
A B/$+%生成可能スペースと指定記号を含む

4行目に注意してください。本ツールの一括入力欄はカンマまたはタブを列の区切りとして扱うため、番号の中にカンマが入っているとそこで切れてしまいます。カンマを含む文字列を扱いたい場合はタブ区切りで貼り付けるか、番号側からカンマを除いてください。

3 of 9の構造とスタート/ストップ文字(*)

CODE39という名前は、1文字を9個のエレメント(5本のバーと4個のスペース)で表し、そのうち3個が太いエレメントになる構造に由来します。この「9個のうち3個が太い」という性質から、3 of 9コードとも呼ばれます。太い/細いの2種類しか区別しないため、読み取り機の構造が単純で済み、古い機器でも扱いやすいという特徴があります。

各文字と文字のあいだには、区切りとして細いスペースが1つ入ります。そしてデータの前後には、開始と終了を示すスタート/ストップ文字としてアスタリスク「*」が置かれます。つまり ABC-001 というデータは、バーコードとしては *ABC-001* という並びで表現されます。

ここでよくある誤解が、「自分でアスタリスクを入力しなければならない」というものです。入力は不要です。本ツールを含む多くの生成ツールは、描画時にアスタリスクを自動で付けます。もしデータとして *ABC-001* と入力すると、アスタリスクが二重になり、読み取り機が最初のデータ用アスタリスクを終端と判断してしまうおそれがあります。古い資料や他社ツールからコピーした番号にアスタリスクが付いている場合は、取り除いてから入力してください。

逆に、スキャナが読み取った結果にアスタリスクが含まれてしまうケースもあります。これはスキャナ側の「スタート/ストップ文字を送信する」設定が有効になっているためで、設定バーコードで無効化できる機種がほとんどです。

CODE39のチェックデジット(モジュラス43)

CODE39には、データの後ろへモジュラス43のチェック文字を付ける運用があります。必須ではなく任意で、付けるかどうかは読み取りシステムと運用規約で決まります。

計算方法は、43文字それぞれに0〜42の値を割り当て、データ文字の値を合計し、43で割った余りに対応する文字を末尾へ追加する、というものです。値の割り当ては次のとおりです。

文字値
0〜90〜9
A〜Z10〜35
−36
.37
スペース38
$39
/40
+41
%42

計算例:ABC-001のチェック文字

1文字ずつ値へ置き換えます。

  • A → 10
  • B → 11
  • C → 12
  • − → 36
  • 0 → 0
  • 0 → 0
  • 1 → 1

合計は 10+11+12+36+0+0+1=70。70を43で割ると商が1、余りが27 です。値27にあたる文字は、A(=10)から17文字進んだ R。したがってチェック文字付きのデータは ABC-001R、バーコードとしての表現は *ABC-001R* になります。スタート/ストップのアスタリスクは値の合計に含めません。

本ツールにはCODE39専用のチェックデジットを自動付加する設定がありません。チェック文字を含める設計であれば、上の計算で求めた完成文字列(この例なら ABC-001R)をそのまま入力してください。規格をまたいだチェックデジットの比較はチェックデジットの解説にまとめています。

運用上いちばん怖いのは、発行側と読み取り側で設定が食い違うことです。発行側がチェック文字を付け、読み取り側が「チェック文字なし」設定だと、アプリケーションには末尾のRが付いた文字列がそのまま渡り、台帳と一致しなくなります。逆の組み合わせでは読み取りエラーになります。導入時に必ず実機で1件通して確認してください。

本ツールでCODE39を作る手順

  1. 一括作成を開き、コード種別で「CODE39」を選びます。
  2. 一括入力欄へ1行1件で管理番号を貼り付けます。表示名・価格・枚数を付けるならタブ区切りで4列にします。
  3. 「一括作成」を押して、小文字が大文字になった結果、エラー行、枚数警告を確認します。
  4. カード単位でPNG保存するか、PNG一括保存(ZIP)でまとめて書き出します。
  5. 紙へ貼る場合はラベル印刷で面付けし、実機のスキャナで読み取れることをテストします。

たとえば rack-a-001 棚A 4 のように、管理番号・表示名・価格空欄・枚数4をタブで入力できます。価格を使わない社内資産の運用では、2列目の表示名だけを入れ、ラベルの値札モードをオフにするとコード中心の表示になります。既存の台帳がExcelにあるなら、CSVとして読み込ませる方法がExcel・CSV連携の解説にあります。

印刷の最小サイズとクワイエットゾーン

CODE39で読み取り不良が起きるとき、原因は番号ではなく印刷条件であることがほとんどです。押さえるべき点は3つあります。

1つめはナローバー幅(X寸法)です。最も細いバーの幅がどこまで小さくできるかは、印刷方式と読み取り機の性能で決まります。オフィス用レーザープリンタと一般的なハンディスキャナの組み合わせなら、細いバーが潰れずに印刷できているかを拡大鏡で確認するのが実用的な判断方法です。画面上の倍率スライダーは0.5〜3.0倍を0.1刻みで調整でき、初期値は1.0倍ですが、これはあくまで描画時のサイズであり、印刷ダイアログの拡大縮小設定によって実寸は変わります。

2つめはクワイエットゾーン、バーコードの左右に必要な空白です。CODE39やNW-7のような連続しない方式では、ナローバー幅の10倍程度、かつ最低でも2.5mm程度の空白を左右に確保するのが一般的な目安とされています。ここに枠線や隣のラベルの文字が入り込むと、スキャナは開始位置を判別できません。ラベル用紙にぎっしり並べるときほど、この余白が削られがちです。

3つめはバーの高さです。高さが不足すると、斜めに当てたときに読み取り線がバーコードから外れやすくなります。ラベル印刷パネルではバーコードの高さを調整できるので、横幅を確保できないぶんを高さで補う、という考え方も有効です。

実務では、いきなり高価なラベル用紙に印刷せず、普通紙に等倍で1枚刷って実機で読ませる工程を挟んでください。ここで読めれば、あとは用紙の材質と印字濃度の問題に絞り込めます。用紙型番ごとの寸法はラベル用紙の解説を参照してください。

CODE39とCODE128の使い分け

どちらを選ぶかで迷ったら、次の観点で判断します。

観点CODE39CODE128
扱える文字数字・英大文字・記号7種の計43文字ASCII 128文字(英小文字・多くの記号を含む)
同じ桁数での横幅長くなりやすい短く収まりやすい
チェックデジット任意(モジュラス43)必須(モジュラス103・自動)
構造の単純さ1文字=9エレメントで単純サブセット切替があり複雑
向く場面既存機器との互換性、英大文字と数字だけの番号桁数が多い、小文字や記号を含む、物流で指定される

実務的な判断の順序としては、まず受け側の指定があるかを確認します。取引先や基幹システムがCODE128を指定しているなら選択の余地はありません。指定がない場合は、印字する番号に小文字や記号が含まれるかで分かれます。含まれるならCODE128、英大文字と数字だけならどちらでも成立します。

そのうえでラベルの横幅を見てください。数字だけが長く続く番号(たとえば12桁以上の連番)は、CODE128のサブセットCが数字2桁を1シンボルにまとめるため、横幅の差が特に大きくなります。狭いラベルに長い番号を入れる必要があるならCODE128が有利です。逆に、既存の読み取り機やラベルプリンタの設定がCODE39前提で組まれている現場では、規格を変えること自体のコストが上回ることもあります。

なお、本ツールではCODE128を選ぶと、サブセットの切り替えとモジュラス103のチェック文字は描画処理が自動で構成します。利用者が意識するのは入力する文字列だけです。規格ごとの一覧比較はバーコードの種類と選び方にあります。

よくある質問

CODE39とは何ですか?

数字と英大文字、そして一部の記号を表現できるバーコードの規格です。1文字を5本のバーと4個のスペースの計9エレメントで表し、そのうち3個が太いエレメントになることから3 of 9とも呼ばれます。工業、物流、社内資産管理などで長く使われています。

CODE39で使える文字は何ですか?

数字0〜9、英大文字A〜Z、スペース、ハイフン、ピリオド、ドル記号、スラッシュ、プラス、パーセントの合計43文字です。英小文字、アンダースコア、カンマ、丸括弧、日本語は基本文字として使えません。

CODE39のアスタリスク(*)は入力が必要ですか?

必要ありません。アスタリスクはデータの開始と終了を示すスタート/ストップ文字で、バーコードを描くときに自動で付きます。データとして自分で入力すると、読み取り時に途中で終端と判断されるおそれがあります。

CODE39に小文字を入力するとどうなりますか?

本ツールでは自動的に大文字へ変換してから生成します。abc-001 と入力すると ABC-001 として扱われます。大文字と小文字を区別したい用途では、CODE39ではなくCODE128を選んでください。

CODE39のチェックデジットの計算方法は?

43文字それぞれに0〜42の値を割り当て、データ文字の値を合計し、43で割った余りに対応する文字を末尾に追加します。ABC-001 なら合計70、43で割った余りは27となり、チェック文字はRです。付けるかどうかは任意です。

CODE39とCODE128はどちらを使うべきですか?

英小文字や記号を含めたい、桁数が多くラベル幅を抑えたい、取引先がCODE128を指定している場合はCODE128です。既存の読み取り機や運用がCODE39前提で、印字するデータが英大文字と数字だけという場合はCODE39が扱いやすくなります。

CODE39が読み取れないときは何を確認しますか?

左右のクワイエットゾーンが確保されているか、印刷倍率が縮みすぎていないか、バーがにじんで太っていないかを確認します。加えて、スキャナ側でCODE39の読み取りとチェック文字の設定が有効かどうかも確認してください。