チェックディジット(検査数字)は、バーコードや会員番号、クレジットカード番号などの末尾に付く1桁の検査用の数字です。前の桁から決まった計算で導かれるため、番号を1桁打ち間違えると計算が合わなくなり、その場で誤りに気づけます。本記事では EAN-13/JAN・ISBN-13・クレジットカード(Luhn)の計算方法を、手計算とコード例で具体的に説明します。
1. チェックディジットの役割
人が番号を手入力したり、バーコードを読み取ったりする場面では、必ず一定の割合で誤りが起きます。チェックディジットは、番号本体から計算した検査数字を末尾に付けておくことで、受け取った側が同じ計算をやり直し、末尾が一致するかを確かめる仕組みです。
- 1桁の打ち間違い(例:3 を 8 と入力)はほぼ確実に検出できます。
- 隣り合う桁の入れ替わり(例:12 を 21 と入力)も多くを検出できます。
- ただし検査は誤りの「検出」であって「訂正」ではありません。どこが間違ったかまでは分かりません。
2. EAN-13 / JAN の計算方法
日本の商品バーコード(JAN)は国際規格 EAN-13 と同じで、13桁のうち先頭12桁が本体、最後の1桁がチェックディジットです。計算手順は次のとおりです。
- 本体12桁に、左から順に
1, 3, 1, 3, …の重みを掛ける(奇数番目が1、偶数番目が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桁おきに2倍する。
- 2倍して2桁(10以上)になったら、その各桁を足す(例:14 → 1 + 4 = 5。これは9を引くのと同じ)。
- すべての桁を合計し、合計が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の倍数になるよう検査数字を決めます。