Luhnアルゴリズムでクレジットカード番号を検証
この検証ツールは、入力されたカード番号から一般的な空白とハイフンを取り除き、残りがすべて数字であることを確認してから、決定的なLuhnチェックを実行します。さらに、Visa、Mastercard、American Express、Discoverの既知の先頭番号から、可能性の高いカードネットワークを示します。決済要求の前に入力ミスを見つける用途には役立ちますが、口座の実在、有効性、名義、残高、購入の可否を証明するものではありません。
無料で実行
入力の正規化と検査の仕組み
カード番号は、数字だけの文字列、または空白やハイフンで区切った一般的な表記で入力してください。このツールが取り除く区切り文字は、その2種類だけです。その後、残ったすべての文字がASCII数字であることを確認します。英字、句読点、スラッシュ、アンダースコア、その他の記号がある場合、黙って削除せず入力エラーを返します。過度な整形によって、誤入力や不正な値が別の番号へ変わり、誤解を招く判定になることを防ぐための厳格な仕様です。空文字列、区切り文字だけの値、文字列以外の値も受け付けません。返却オブジェクトに正規化後の番号は含まれず、チェック結果と可能性の高いネットワークだけが含まれます。この計算はローカルで完結し、発行会社への照会、認証、ネットワーク要求、乱数、永続状態を使いませんが、お客様のアプリケーションでは元の入力を常に機微な決済情報として扱ってください。
Luhnの結果が示す範囲
Luhnアルゴリズムは、よくある転記ミスを検出するためのチェックディジット計算です。右端の数字から始め、1桁おきに値をそのまま使う処理と2倍する処理を交互に行います。2倍した値が9を超えた場合は9を引き、得られた値をすべて合計します。合計が10で割り切れれば検査に合格します。合格が意味するのは、数字列が末尾のチェックディジットと数学的に整合することだけです。銀行がその番号を発行したこと、口座が有効であること、利用可能額があること、入力者に利用権限があることは証明しません。架空の番号でも合格する場合があり、実在するカードでも1桁の誤入力で通常は不合格になります。フォームの早期フィードバックやデータ品質検査に利用し、トークン化、本人認証、オーソリ、詐欺対策、最終判断は適切な決済事業者へ委ねてください。
カードネットワーク候補の判定方法
ネットワークは発行者識別用の先頭番号から推定し、外部の登録簿へ問い合わせることはありません。4で始まる番号はVisaです。Mastercardは従来の51から55に加え、新しい2221から2720も対象です。American Expressは34と37を使用します。Discoverは6011、65、644から649、および割り当て範囲の622126から622925を対象とします。どの規則にも一致しない場合、ネットワークは不明になりますが、Luhn判定は通常どおり計算します。ここで候補である点が重要です。番号の割り当ては変化し、提携カードも存在し、このツールが意図的に認識するのは指定された4ネットワークだけです。先頭番号の判定とチェックサムは独立しているため、既知の先頭番号でもLuhnに不合格となる場合や、Luhnに合格してもネットワークが不明となる場合があります。各要求の基本料金は公開価格の$0.002で、桁数や判定結果による追加料金はありません。
活用例
決済入力時の即時案内
適切な決済事業者へ認証を依頼する前に、数字の入力ミスと思われる箇所を検出できます。
移行データの品質確認
古い記録のカード番号が形式上整っているかを調べ、口座が現在も有効だとは断定しません。
決済フォームの動作試験
許可された区切り文字を受理し、不正な文字を一貫して拒否することを確認できます。
よくある質問
Luhnに合格すれば実在するカードですか?
いいえ。数字がチェックサムを満たすことだけを示します。実在、名義、状態、残高、利用承認には決済事業者と発行会社の応答が必要です。
どの区切り文字を使用できますか?
空白とハイフンを使用できます。検査前に除去され、それ以外の数字でない文字があると入力エラーになります。
判定できるカードネットワークは何ですか?
先頭番号の規則により、Visa、Mastercard、American Express、Discoverの可能性を判定します。それ以外は不明になります。
既知の先頭番号でもチェックに失敗しますか?
はい。先頭番号の分類とLuhn計算は独立しているため、Visaらしい先頭番号でも合格は保証されません。
銀行やカードネットワークへ問い合わせますか?
いいえ。決定的な算術処理と先頭番号の規則だけを使い、外部照会やオーソリ要求は行いません。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/data/credit-card-luhn-validate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"number":"4111 1111 1111 1111"}'const res = await fetch("https://api.kit.forhosting.com/data/credit-card-luhn-validate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"number": "4111 1111 1111 1111"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/data/credit-card-luhn-validate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"number": "4111 1111 1111 1111"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/data/credit-card-luhn-validate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"number":"4111 1111 1111 1111"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"number":"4111 1111 1111 1111"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/data/credit-card-luhn-validate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"number": "4111 1111 1111 1111"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.credit_card_luhn_validate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_mb | 25 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |