チェックディジットとは — EAN-13・ISBN・Luhnの計算方法

チェックディジット(検査数字)は、バーコードや会員番号、クレジットカード番号などの末尾に付く1桁の検査用の数字です。前の桁から決まった計算で導かれるため、番号を1桁打ち間違えると計算が合わなくなり、その場で誤りに気づけます。本記事では EAN-13/JAN・ISBN-13・クレジットカード(Luhn)の計算方法を、手計算とコード例で具体的に説明します。

要点:チェックディジットは「各桁に重みを掛けて合計し、合計が10の倍数になるよう最後の1桁を選ぶ」という考え方です。方式ごとに重みの付け方が違うだけで、原理は共通しています。

1. チェックディジットの役割

人が番号を手入力したり、バーコードを読み取ったりする場面では、必ず一定の割合で誤りが起きます。チェックディジットは、番号本体から計算した検査数字を末尾に付けておくことで、受け取った側が同じ計算をやり直し、末尾が一致するかを確かめる仕組みです。

2. EAN-13 / JAN の計算方法

日本の商品バーコード(JAN)は国際規格 EAN-13 と同じで、13桁のうち先頭12桁が本体、最後の1桁がチェックディジットです。計算手順は次のとおりです。

  1. 本体12桁に、左から順に 1, 3, 1, 3, … の重みを掛ける(奇数番目が1、偶数番目が3)。
  2. 掛けた結果をすべて合計する。
  3. 合計を10で割った余りを求め、10からその余りを引く(引いた結果が10なら0にする)。これがチェックディジット。

例として本体 400638133393 で計算します。奇数位(4,0,3,1,3,9)の和は 20、偶数位(0,6,8,3,3,3)の和は 23 でこれを3倍すると 69。合計は 20 + 69 = 89。89 を 10 で割った余りは 9 なので、10 − 9 = 1 がチェックディジットです。よって完成した番号は 4006381333931 になります。

3. ISBN-13 の計算方法

書籍のISBN-13は先頭が 978 または 979 で始まる13桁で、チェックディジットの計算はEAN-13とまったく同じです(重み 1・3 の交互)。旧来の10桁ISBN(ISBN-10)は重み付けが異なり、検査数字に X(=10)が現れることがある点が違いますが、現在流通している13桁はEAN-13の規則で計算できます。

4. クレジットカード(Luhn)の計算方法

クレジットカード番号やIMEIなどは Luhnアルゴリズム(モジュラス10)で検査します。手順は次のとおりです。

  1. チェックディジットを付ける位置を空けて、右端から1桁おきに2倍する。
  2. 2倍して2桁(10以上)になったら、その各桁を足す(例:14 → 1 + 4 = 5。これは9を引くのと同じ)。
  3. すべての桁を合計し、合計が10の倍数になるように足りない分をチェックディジットにする(= 10 − 合計の一の位、10なら0)。

本体 7992739871 なら、合計は 67 になり、10 − 7 = 3 が検査数字です。完成番号 79927398713 は、末尾を含めて同じ手順で合計すると10の倍数になり、妥当と判定できます。

5. 実際に試せる方法(JavaScript)

ブラウザのコンソールや Node.js で、次のコードをそのまま実行すると計算を確認できます。

// EAN-13 / ISBN-13 のチェックディジット
function ean13(body /* 12桁の文字列 */) {
  let sum = 0;
  for (let i = 0; i < 12; i++) sum += (+body[i]) * (i % 2 === 0 ? 1 : 3);
  return (10 - (sum % 10)) % 10;
}
console.log(ean13("400638133393")); // 1

// Luhn(クレジットカード等)のチェックディジット
function luhn(body) {
  let sum = 0, dbl = true;
  for (let i = body.length - 1; i >= 0; i--) {
    let n = +body[i];
    if (dbl) { n *= 2; if (n > 9) n -= 9; }
    sum += n; dbl = !dbl;
  }
  return (10 - (sum % 10)) % 10;
}
console.log(luhn("7992739871")); // 3

手計算の結果と一致するはずです。ブラウザ上でボタン操作だけで確かめたい場合は、下記の計算ツールに番号を入力してください。

Free Tool チェックディジット計算ツールで確かめる EAN-13/JAN・UPC-A・ISBN-13・Luhn を選び、番号を入れるだけで検査数字の計算と末尾の検証ができます。すべてブラウザ内で完結します。

よくある質問(FAQ)

チェックディジットは何のためにありますか?

番号の入力ミスや読み取りミスを検出するためです。末尾の1桁を前の桁から計算で導くため、途中の数字が1つ違うと計算が合わなくなり、その番号が正しくないと分かります。1桁の打ち間違いや隣り合う桁の入れ替わりといった、人間が起こしやすい誤りの多くを捕まえられます。

EAN-13の重みはなぜ1と3なのですか?

1桁の誤りと、隣り合う2桁の入れ替わりを検出しやすくするためです。1と3のように差が2以上ある重みを交互に掛けると、隣接する桁を入れ替えたときに合計が変わりやすく、誤りとして検出できます。ただし差が3の場合など一部の入れ替わりは見逃すため、完全ではありません。

Luhnとモジュラス10は同じものですか?

Luhnアルゴリズムはモジュラス10方式の一種で、クレジットカード番号などで広く使われる具体的な手順です。右端から1桁おきに2倍し、2倍して10以上になったら各桁を足す(結果的に9を引く)ことで合計を作り、その合計が10の倍数になるよう検査数字を決めます。

← 技術ブログ一覧へ戻る