Luhn チェック — クレジットカード番号・IMEI 検証
Luhn アルゴリズム (Mod 10) でクレジットカード番号 (Visa / MasterCard / Amex / Discover / JCB / Diners / UnionPay)、IMEI (携帯端末識別番号)、SIN (カナダ社会保障番号) などの妥当性を検証します。複数行を貼り付けて一括チェック、Visa / Amex などのブランドを IIN プレフィックスから自動判定、合計チェックサムの計算過程 (偶数桁を 2 倍、桁数和を取って合計) も表示。テストデータ作成、フォーム入力サニタイズ、データ移行の品質チェック、CSV 取り込み前の bulk validate に。番号はブラウザ内でだけ処理されます。
使い方
番号を 1 行 1 件で入力 (CSV から該当列をペースト可、空白とハイフンは自動除去)。 「検証する」で Luhn (Mod 10) チェック + ブランド検出を一括実行。 各行の Valid / Invalid と理由、ブランドが結果テーブルに表示されます。 結果から Valid のみ / Invalid のみコピー、または CSV ダウンロードで取り出せます。
詳細解説
クレジットカード番号が持つ直接的な金融リスク
クレジットカード番号 (PAN: Primary Account Number) は、決済プロセスの根幹をなす情報であり、カード番号・有効期限・CVV の組み合わせで不正決済が可能になります。Luhn チェックは番号の形式的な妥当性を確認するものですが、この検証操作が発生する文脈は、バックエンドの決済ロジック開発・フロントエンドのフォームバリデーション実装・既存データの品質チェック・不正番号のフィルタリングです。これらの場面では実際のカード番号や、少なくともカード番号に近い形式のテストデータが扱われます。
特に注意が必要なのは、CSV エクスポートから Luhn チェックをかける作業です。決済システムの開発・テスト環境では、実際のカード番号に近いテストデータや、場合によっては本番データのサブセットが扱われます。これらをオンラインの Luhn チェッカーに貼り付けることは、決済情報を外部サーバーに送ることになります。
オンライン Luhn チェッカーにカード番号を送るリスク
「luhn check online」「credit card number validator」で検索して出るサービスは、入力番号をサーバーで処理します。PCI DSS (Payment Card Industry Data Security Standard) は、カード会員データの保護を求める標準で、カード番号を扱う環境に厳格な要件を課しています。本番のカード番号を第三者サービスに送信することは PCI DSS 違反になりえます。
テスト用の番号 (Luhn は通るが実在しないカード) であっても、外部サービスへの送信を習慣にすることは、実番号との区別が曖昧になる状況を生みます。「どうせテスト番号だから」という感覚で外部ツールを使い続けると、本番データを誤って送信するリスクが高まります。
BigInt による Mod 10 計算をブラウザ内に閉じる
Luhn アルゴリズム (Mod 10) は純粋な整数演算です。右端のチェックデジットから左に向かって偶数位置の桁を 2 倍し、2 桁になったら桁和を取り、全桁の合計が 10 の倍数なら Valid です。このツールは JavaScript で実装した Luhn アルゴリズムをブラウザ内で実行します。IIN (Issuer Identification Number) プレフィックスと桁数によるブランド判定 (Visa・MasterCard・Amex・Discover・JCB・Diners・UnionPay・Maestro) も静的テーブルとの照合でブラウザ内に完結します。
入力した番号はページメモリにのみ存在し、ネットワーク送信はありません。本番データ・テストデータを問わず、カード番号形式のデータを外部に出すことなく検証できます。
決済システム開発での安全な使い方
フロントエンドの入力バリデーション実装時に、テストケースとして使える Valid / Invalid 番号のリストをブラウザ内で確認できます。CSV エクスポートした顧客データの番号列の品質チェック、既存データの中から Luhn が通らない無効番号を特定するクリーニング作業にも使えます。Valid のみ / Invalid のみのコピーで次の処理に渡す、CSV ダウンロードで結果を記録する、という一連の作業がブラウザ内で完結します。フォーム入力サニタイズの正規表現を磨きたい場合は regex-test を、請求書のメールアドレスを並行して検証したい場合は email-validate を続けて使えます。
Luhn アルゴリズムの数学的位置づけと ISO/IEC 7812 によるカード番号構造
Luhn アルゴリズム (別名 modulus 10 / mod 10) は IBM のハンス・ペーター・ルーン (Hans Peter Luhn) が 1954 年に考案し 1960 年に米国特許 (US Patent 2,950,048) として登録された、パブリックドメインのチェックサムアルゴリズムです。設計目的は「キーパンチ作業の入力ミス」を機械的に検出することで、(a) 単一桁の誤入力、(b) 隣接 2 桁の入れ替え (transposition、ただし 09 ⇔ 90 を除く) を 100% 検出します。一方で同じ桁の置換 (22 → 55 のように違うチェックサム差で偶然合致するケース) や、3 桁以上の入れ替えは検出できない既知の弱点があります。CRC のような暗号学的強度はなく、改竄の検出ではなく単純な打ち間違いの捕捉が目的です。
クレジットカード番号自体は ISO/IEC 7812 によって構造化されており、(a) 先頭 1 桁の MII (Major Industry Identifier、業界識別子: 4=Visa を含む金融、5=金融、6=Maestro/Discover など)、(b) IIN/BIN (Issuer Identification Number、発行者識別番号、先頭 6〜8 桁) でカードブランドと発行銀行を識別、(c) 残りの桁が個別アカウント番号、(d) 最後の 1 桁が Luhn チェックサム、という構成です。本ツールの IIN プレフィックス判定はこの ISO/IEC 7812 構造に従い、Visa は 4 で始まる 13/16/19 桁、Amex は 34 / 37 で始まる 15 桁、JCB は 35 で始まる 16/19 桁、といったルールを静的テーブルで突合しています。
Luhn では「合っている」だけ — その他の検証ロジックとの組み合わせ
Luhn が通る = 実在するカード番号、ではありません。Luhn が通っても (a) その IIN を持つ発行銀行が存在しない、(b) 発行されたがすでに解約されている、(c) 有効期限が切れている、(d) アクティブだが該当のオーソリ要求を断る、というケースは普通にあり得ます。本物のカード番号として通用するか判定するには、決済ゲートウェイ (Stripe / Adyen / PayPay) に Authorize API でゼロ円もしくは 100 円程度のテスト認証 (authorization hold) を投げる必要があり、これは本ツールの範囲外です。
逆に「Luhn が通らない」のに本物のカードである、というケースもまれにあります。IMEI (国際移動体装置識別番号、TAC 8 桁 + シリアル 6 桁 + Luhn 1 桁の 15 桁) は ETSI TS 123 003 で Luhn 必須ですが、特定キャリアの管理コードや海外端末で例外があることが知られています。カナダの社会保障番号 (SIN: Social Insurance Number) も Luhn 必須ですが、9 で始まる番号は一時就労者向けで通常の Luhn ロジックとは別管理 — 本ツールは標準的な Luhn ルールだけ実装しているので、これらの例外を扱うシステムでは追加のドメインルールが必要です。Luhn は「最初のゲート」として使い、その先に IIN ホワイトリスト・有効期限・3D セキュア・トークン化を重ねる多層検証が決済システムの標準です。
よくある質問
- Luhn アルゴリズムって何?
- 右端 (チェック digit) から左に向かって、偶数位置 (右から 2, 4, 6...) の桁を 2 倍にし、2 倍で 2 桁になったらその桁和を取ります。それ以外の桁はそのまま。すべての結果を合計して 10 で割り切れたら valid。クレジットカード番号、IMEI、SIN (カナダ社会保障番号) など多くの ID で採用されています。
- Luhn が通れば本物のカード番号?
- いいえ、Luhn は形式チェックのみで実際の発行確認はできません。書き間違いやランダム入力の検出には十分ですが、不正な番号でも「Luhn が偶然通る」ケースはあります。発行確認には決済プロセッサ (Stripe / Adyen 等) の API が必要です。
- ブランド判定はどう行ってる?
- IIN (Issuer Identification Number) プレフィックスと桁数で判定します。例: 4xxx で 16 桁 = Visa、34xx/37xx で 15 桁 = Amex、51-55xx で 16 桁 = MasterCard。BIN データベースは網羅的ではなく主要ブランド (Visa / MasterCard / Amex / Discover / JCB / Diners / UnionPay / Maestro) のみ内蔵。
- IMEI はどう検証する?
- IMEI は 15 桁の Luhn 番号です。普通の番号入力欄に IMEI を貼り付ければ valid / invalid 判定されます。IMEI 専用の brand 判定はしませんが「桁数 = 15」「Luhn pass」で IMEI の可能性が高いと推測できます。
- データはどこかに送信されますか?
- いいえ。すべてブラウザ内 (JavaScript) で完結します。
「送らない」を確かめるには
このツールは入力データを外部に送信しません。仕組み・監査手順・運営方針は以下で詳しく説明しています。
類似のツール
正規表現テスター — マッチ / 置換のリアルタイム確認
パターンとフラグを入力するとテキスト内のマッチ箇所をリアルタイムでハイライト。キャプチャグループ・名前付きグループの内容も一覧表示。$1 などを使った置換プレビューにも対応。すべてブラウザ内で処理。
メールアドレス検証 — RFC 5322 / 使い捨てドメイン / ロール検出
メールアドレスを 1 行 1 件で貼り付けると、RFC 5322 ベースの構文検証 (local 部 / domain 部 / TLD / 長さ制限)、disposable (使い捨て) ドメイン検出 (mailinator / 10minutemail / guerrillamail など 100+ ドメインを内蔵)、ロールアドレス (admin / support / postmaster / no-reply 等) の判定、Gmail dot/+ tag 正規化を一括処理します。結果はテーブル表示 + CSV ダウンロード対応。MailChimp や Stripe にインポートする前のサニタイズ、フォームから収集したリストのクリーニング、配信前のバウンス予測に。メールアドレスはブラウザ内でだけ処理され、サーバーに送信されません。
ハッシュ生成 — SHA-1 / 256 / 384 / 512
テキストから SHA-1 / SHA-256 / SHA-384 / SHA-512 のハッシュ値を一括生成します。Web Crypto API ベースでブラウザ内処理。
UUID 解析 — バージョン / 変種 / タイムスタンプを読み取り
UUID 文字列を貼り付けるだけで、バージョン (v1〜v8 / Nil / Max)、変種 (RFC 9562 / Microsoft / 古い NCS)、ハイフン付き / 無し / 波括弧 / URN 表記、整数 (BigInt) とバイト列を一覧表示します。UUID v1 / v6 はミリ秒精度の生成時刻と MAC アドレス、UUID v7 は UNIX 時刻 (ms) を逆算。波括弧やスペース、urn:uuid: プレフィックス、大文字混在も自動で正規化。入力データはサーバーに送信されず、すべてブラウザ内で完結します。