ルーン・アルゴリズム計算機 - クレジットカードとIMEIの検証
ルーンアルゴリズム(mod10チェックサム)を使って、クレジットカード番号やIMEI、カナダの社会保険番号など各種ID番号が正しい形式かどうかを検証する無料の計算ツール。桁ごとの計算過程を表示し、ソフトウェアのテストやシステム開発向けに有効な番号を即座に複数生成することもできる。
ルーン・アルゴリズム計算機
数字がルーン・モッド10検証を通過するかチェック
ドキュメンテーション
ルーンアルゴリズムとは何か?
ルーンアルゴリズムは、mod 10アルゴリズムとも呼ばれ、数字の並びが有効な識別番号になりうるかどうかを確かめる計算式です。クレジットカード番号、携帯電話のIMEI番号、その他のIDコードの入力ミスを、エラーになる前に見つけるために使われます。IBMの技術者ハンス・ペーター・ルーンが、1954年に出願された特許でこの方法を説明しました。
このアルゴリズムは、番号が実在するか、現在有効かを証明するものではありません。数字が想定されたパターンに従っていることだけを確認します。カード番号がルーンチェックに合格しても、偽造、期限切れ、または利用可能な残高がない可能性があります。
ルーンチェックサムの計算方法
このチェックでは、番号の数字を右から左に読み取ります。
- 右から二番目の数字を起点に、一つおきに各数字を二倍します。
- 数字を2倍した結果が9より大きい場合は、そこから9を引きます。(これは、結果の2桁を足すことと同じです。したがって、16は1 + 6 = 7となり、同様に16 − 9 = 7となります。)
- 二倍した数字(調整後)と、そのまま残した数字をすべて合計します。
- 合計が10で割り切れれば、その番号は有効です。割り切れなければ無効です。
事業者が新しいID番号を発行するときは、同じ手順を逆に使います。最後の1桁以外のすべての数字を選んでチェックを実行し、合計が10で割り切れるように最後の「チェックデジット」を選びます。
実例:カード番号の検証
テスト番号 4532015112830366を使います。
- 右から左に並べた数字:6、6、3、0、3、8、2、1、1、5、1、0、2、3、5、4
- 一桁おきに各数字を2倍する:6、12、3、0、3、16、2、2、1、10、1、0、2、6、5、8
- 9を超える結果から9を引く:6、3、3、0、3、7、2、2、1、1、1、0、2、6、5、8
- すべてを合計する:6+3+3+0+3+7+2+2+1+1+1+0+2+6+5+8 = 50
- 50は10で割り切れるため、この番号は有効です。
実例:無効な番号
490154203237517を使います。これはIMEI番号で使われる形式の15桁の番号です。
同じ手順を実行すると、合計は59になります。59は10で割り切れないため、この番号は無効です。
有効な番号にするには、最後の数字だけを変更すればよいことになります。最後の数字に可能な値を1つずつ試すと、最後の数字を8にした場合、合計は60となり、10で割り切れます。したがって、490154203237518は有効なルーン番号であり、0から9までのその他の最後の数字(8を除く)では無効になります。
ルーンアルゴリズムの用途
- 決済カード。 Visa、Mastercard、American Expressなどのネットワークは、カード番号全体がルーンチェックに合格するように番号を設定しています。決済処理業者に問い合わせる前に、決済フォームで入力された数字の誤りを検出できます。
- IMEI番号。 携帯電話やその他のセルラー機器に割り当てられる15桁の識別子には、ルーンのチェックディジットが含まれています。
- カナダ社会保険番号。 9桁のSINには同じチェックが使われます。
- 米国の全国医療提供者識別番号(NPI)。 米国の医療提供者には10桁のNPIが付与され、ルーン方式のチェックで検証されます。
ルーンアルゴリズムで検出できないもの
このアルゴリズムは、どの数字であっても、またどの位置にあっても、一桁だけの入力ミスを必ず検出します。また、隣接する二桁の入れ替え(「39」と入力すべきところを「93」と入力する場合)もすべて検出しますが、唯一の例外があります。それは、0と9を隣り合わせで入れ替える場合で、たとえば「09」が「90」になるケースです。
また、同じ数字二つの組を別の同じ数字二つの組に置き換える「双子」エラーを三種類見逃します。22を55と読み違える場合、33を66と読み違える場合、44を77と読み違える場合です。こうした検出漏れの種類は既知で限定的なため、ルーンチェックは通常の入力ミスの検出には信頼できますが、それだけで完全なエラー検出システムとはみなされません。
ルーンチェックはセキュリティチェックではない
ルーンアルゴリズムは、不正行為ではなく、偶発的なデータ入力ミスを検出するために設計されました。チェックに合格した番号は数学的に正しい形式になっているだけです。実際の決済セキュリティは、ルーンチェック後に追加されるカードのCVVコード、住所確認、3-Dセキュア認証など、別の層に依存します。ルーンチェックは、時間のかかる後続のチェックに先立って実行される、単純で低コストな最初のフィルターにすぎません。
JavaScriptで番号を検証する
1function isValidLuhn(number) {
2 const digits = number.replace(/\D/g, '').split('').map(Number);
3 let sum = 0;
4 let doubleDigit = false;
5 for (let i = digits.length - 1; i >= 0; i--) {
6 let d = digits[i];
7 if (doubleDigit) {
8 d *= 2;
9 if (d > 9) d -= 9;
10 }
11 sum += d;
12 doubleDigit = !doubleDigit;
13 }
14 return sum % 10 === 0;
15}
16よくある質問
ルーンアルゴリズムは何に使われるか?
クレジットカード番号、IMEI番号、カナダのSINなどの識別番号が内部的に整合しているかを確認します。処理エラーが発生する前に、入力ミスや数字の入れ替えを検出します。
ルーンアルゴリズムのエラー検出精度はどの程度か?
1桁だけの入力ミスをすべて検出し、隣接する2桁の入れ替えのほぼすべてを検出します。見逃す入れ替えは、0と9が隣り合っている場合だけです。また、3種類の特定の「双子」置換、つまり22を55にする場合、33を66にする場合、44を77にする場合も見逃します。
有効なルーン番号なら、カードは実在するのか?
いいえ。このチェックで確認できるのは、数字が想定されたパターンに合っていることだけです。カードが存在するか、有効な状態か、利用可能な残高があるかは分かりません。事業者はそのために、CVVコードなどの別のチェックを追加します。
ルーンチェックはコンピューターなしで実行できるか?
はい。必要なのは二倍、減算、加算だけなので、手計算や簡単な計算機で実行できます。これは、デジタルコンピューターが普及する前のパンチカード時代を想定した、当初の設計の一部でした。
なぜmod 10アルゴリズムと呼ばれるのか?
最後の手順で、合計が10でちょうど割り切れるかを確認するためです。数学ではこれを「sum mod 10 = 0」と表します。「mod」はmoduloの短縮形で、除算後に残る余りを意味します。
ルーンアルゴリズムを発明したのは誰か?
IBMの技術者ハンス・ペーター・ルーンが、1954年に出願した特許(1960年に米国特許2,950,048として登録)でこの方法を説明しました。彼は、コンピューターによるテキスト索引付けの初期研究でも知られています。
参考文献
- Hans Peter Luhn (IBM). Computer for Verifying Numbers, 米国特許 2,950,048. Google Patents上の米国特許2,950,048 — ルーンの特許で、1954年1月6日に出願され、1960年8月23日に登録されました。
- 3GPP / ETSI. TS 123 003: Numbering, addressing and identification. ETSI TS 123 003 V17.8.0 — IMEIのチェックディジットは、ルーンの計算式で求められます。
- Centers for Medicare & Medicaid Services. Requirements for National Provider Identifier (NPI) and NPI Check Digit. CMSのNPIチェックディジット要件 — NPIのチェックディジットは、ルーンのモジュロ10の計算式を使います。この式はカード発行会社の番号にも使われています。