コード設計とは ― 種類とチェックディジット
コード設計は、
コード設計とは、データを短い記号で表す決まりを作ること
商品や顧客を、名前ではなく短い番号や記号で管理するとき、その付け方の決まりを作るのがコード設計です。どの種類のコードを使い、何桁にし、入力の誤りをどう見つけるかを決めます。商品名のような文字列は表記がゆれやすいので、決まった形のコードで識別します。
E-R図で整理した顧客や商品などのエンティティには、それぞれを識別するコードが必要です。決めたコードは、RDBの表で行を1つに決める主キーの値にもよく使います。
コードの種類は、順番・区分・桁別・表意・合成の5つ
同じ黒のボールペンでも、コードの付け方は何通りもあります。次の図は、太さ0.5mmの黒のボールペンを、5種類のコードで表したものです。
順番コードは、登録した順に0001、0002と番号を振るコードです。区分コードは、番号の範囲ごとに分類を割り当てるコードです。図では001〜099をボールペンに割り当てたので、053を見ればボールペンだと分かります。
桁別コードは、桁ごとに意味を持たせたコードです。図の1215では、1桁目が筆記具、2桁目がボールペン、3桁目が黒、4桁目が太さの0.5mmを表します。桁別コードは、コードの位置で意味が決まります。
表意コードは、略号を使って内容を表すコードです。BPがボールペン、BKが黒を表すように、コードを見ただけで内容が読み取れます。合成コードは、ここまでの種類を組み合わせたコードです。図では、分類を表す略号BPに、分類の中での順番012をつなげています。
区分コードは分類コードとも呼びます。商品のバーコードに使うJANコードも、事業者を表す部分と商品を表す部分を組み合わせています。GS1 Japanのガイドラインでは、JANコードの13桁は、事業者コード・商品アイテムコード・チェックデジットの3つでできています。
種類ごとの長所と短所は、桁数と追加のしやすさで分かれる
意味を持たせるほどコードは読みやすくなりますが、そのぶん桁数が増えます。順番コード・区分コード・桁別コードの長所と短所をまとめると、次のとおりです。
| 種類 | 長所 | 短所 |
|---|---|---|
| 順番コード | 桁数が | コードから |
| 区分コード | 少ない | あとから |
| 桁別コード | 各桁が | 桁数が |
順番コードは短く追加しやすい代わりに、コードから分類が分かりません。区分コードは、ボールペンの範囲である001〜099に100件目を足そうとしても、空きがありません。桁別コードは、分類を1段増やすたびに桁も1つ増えます。
表意コードは、コードを見ただけで内容が分かるのが長所です。
コード設計では、対象と件数を見てから種類と桁数を選ぶ
コード設計で決めることを順に並べると、たとえば次のようになります。
- 何を識別するコードかを決め、誰がどこで使うかを確かめます。
- 今の件数と、将来増える件数を見積もります。
- 使い方に合う種類を選び、件数に余裕を持たせて桁数を決めます。
- 入力の誤りを見つけるため、チェックディジットを付けるかを決めます。
- コードと意味の対応を一覧にまとめ、関係者で同じものを使います。
桁数は、将来の件数から決めます。4桁の順番コードなら、0001〜9999の9,999件までしか付けられません。分類の基準がはっきりしているものには桁別コード、決めにくいものには順番コードが向きます。コードから内容が分かることを優先するなら、表意コードを選びます。
一度付けたコードは、変えずに使い続ける
コードを主キーにすると、ほかの表が外部キーとしてその値を参照します。コードを変えると、参照しているすべての行を直すことになります。桁別コードや表意コードは、分類や色の決め方が変わると、コードの意味と中身が合わなくなります。
使わなくなったコードを、別のものに付け直すことも避けます。JANコードでは、GS1 Japanのガイドラインが、2019年1月以降は一度使ったコードの再利用を認めていません。移行措置として、2018年12月末までに販売を終えたコードだけは、1回に限り再利用できます。再利用を止めたのは、商品情報の重複や商品の取り違えが起きやすくなったためです。
チェックディジットは、入力の誤りを見つけるための1桁
チェックディジットとは、コードの数字から計算で求め、末尾に付ける1桁の数字です。チェックデジットとも書きます。入力したコードから同じ計算をし直し、末尾の1桁と合わなければ、どこかに誤りがあると分かります。
JANコードでは、13桁目がチェックディジットです。GS1 Japanのガイドラインにある、先頭12桁が456995111617の例で計算すると、次のようになります。
- 左から順に、各桁に1と3を交互に掛けます。
- 掛けた結果をすべて足すと、121になります。
- 10から合計の下1桁の1を引いた9が、チェックディジットです。
合計の下1桁が0のときは、チェックディジットも0です。ガイドラインは、右端から数えて偶数番目の桁を足して3倍し、奇数番目の桁の和を加える手順で書いています。13桁目を含めて右から数えるので、12桁を左から見ると1と3を交互に掛けるのと同じ計算になります。
見つけられる誤りと、見逃す誤り
1桁だけを打ち間違えると、合計は正しい数字との差の1倍か3倍だけ変わります。この変化は10の倍数にならないので、1桁だけの誤りは必ず見つかります。
隣り合う2桁を入れ替えると、合計は2つの数字の差の2倍だけ変わります。差が5のときだけ変化が10になり、下1桁が変わりません。そのため、1と6や3と8のような組の入れ替えは見逃します。
数字を入れて、チェックディジットを計算する
次の図に12桁を入れると、13桁目に付けるチェックディジットを計算します。13桁を入れると、13桁目が計算と合うかを確かめます。例のボタンを押すと、打ち間違いや入れ替えを検査で見つけられるかを試せます。
数字だけを
左から
- 4×14
- 5×315
- 6×16
- 9×327
- 9×19
- 5×315
- 1×11
- 1×33
- 1×11
- 6×318
- 1×11
- 7×321
- 積の
合計 - 121
- 合計の
下1桁 - 1
- チェックディジット
- 10 − 1 = 9下1桁が
0なので 0
13桁目に
13桁目のは、
13桁目はですが、
正しい
正しい
正しい
重みと割る数を変えた方式もある
JANコードの方式は、積の合計を10で割った余り(合計の下1桁)からチェックディジットを決めます。割る数を基数と呼び、基数を11にした方式もあります。どちらも、各桁に決まった重みを掛けて足し、割った余りからチェックディジットを決める点は同じです。
例として、データ7394に、重み付け定数1234と基数11でチェックデジットを付けます。積の和は、7×1+3×2+9×3+4×4 = 56 です。56を11で割った余りは1で、11−1 = 10 の1の位の0を末尾に付けると、73940になります。
入力チェックの種類と、チェックディジットとの関係
チェックディジットによる検査は、入力の誤りを防ぐ方法の1つです。画面設計で使う入力チェックには、次の7つが代表的です。チェックディジットのように検査用の文字を付けて確かめる方法は、チェックキャラクターに当たります。
- ニューメリックチェック:数字だけが入っているかを確かめる
- フォーマットチェック:桁数や日付の形など、決まった形に合うかを確かめる
- リミットチェック:値が決めた上限と下限の範囲に収まるかを確かめる
- 組合せチェック:複数の項目の組み合わせに矛盾がないかを確かめる
- 照合チェック:入力したコードが、登録済みの一覧にあるかを確かめる
- バランスチェック:一致すべき値が一致するかを確かめる。たとえば貸方と借方の合計
- チェックキャラクター:コードに付けた検査用の文字が、計算と合うかを確かめる
チェックディジットが合っても、そのコードが登録済みとは限りません。存在しない商品のコードでも、計算が合えば検査を通ります。照合チェックと組み合わせれば、存在しないコードも見つけられます。
参考にした資料
- IPA「平成21年度 過去問題」(応用情報技術者試験 秋期 午前 問27)
- GS1 Japan「GTIN 設定ガイドライン」(2.1.1 GTIN-13、3.3、10 チェックデジット計算方法)
- GS1 Japan「チェックデジットの計算方法」
練習問題(全5問)
正解:桁別コード
桁ごとに
正解:桁数が
順番コードは
正解:6
積の
正解:隣り合う3と
隣どうしを
正解:リミットチェック
値が
選んでから「採点する」を押すと、解説つきで答え合わせができます。
関連記事
おすすめの本 PR
セキュリティとデータベースは、基本情報技術者試験の対策本でまとめて学べます。

