Luhnアルゴリズム検証
数字列がLuhnのmod 10チェックに合格するかをすぐに確認できます。79927398713は合格です。1桁の打ち間違いはすべて、隣り合う数字の入れ替わりも多くを見つけますが、番号の実在までは保証しません。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
Luhnアルゴリズム検証ツールは、数字列が広く利用されているmod-10チェックサムの計算式を満たすか確認します。先頭のゼロを含め、表示されているとおりに数字を送信すると、有効または無効という簡潔な結果が返されます。この機能が確認するのはチェックサムだけです。発行元の特定、アカウントの存在確認、外部サービスへの問い合わせは行いません。数字以外の文字を含む入力は自動修正せず、明示的にエラーとして扱うため、自動処理の動作が予測しやすく、別のシステムへ渡る前に書式の誤りを発見できます。
Luhnの判定結果が実際に示す内容
Luhnチェックサムは、10進数字の並びに含まれる誤りを検出するための簡潔な規則です。右端から処理し、チェックディジットはそのままにして、1つおきの数字を2倍します。2桁になった値からは9を引き、得られた値をすべて合計します。
合計が10で割り切れる場合、その数字列は有効です。この方法では、1桁だけを誤って変更した場合をすべて検出でき、隣接する数字の一般的な入れ替えも多く検出できるため、入力や転記の間違いを見つける用途に適しています。ただし、有効という結果は、その番号が実際に発行されたこと、特定の方に属すること、現在利用できること、取引に使用できることを証明しません。
入力された文字列がLuhnの計算式と整合することだけを示します。画面やデータ処理では、本人確認やアカウント確認ではなく、チェックサムの有効性として表示してください。入力は文字列のまま扱い、先頭のゼロも保持します。
JavaScriptの数値へ変換しないため、長い識別子でも精度の制限によって桁が失われません。
入力の準備とエラーの読み分け方
空白、ハイフン、プラス記号、小数点、改行、英字などは無効な入力として拒否されます。この厳格な動作は意図したものです。句読記号などを黙って削除すると、前段階の書式不良が隠れたり、コピーしたデータの意味が変わったり、異なるテキストを受け取った2つのシステムが一致しているように見えたりする場合があります。
元データが区切り付きで表示されている場合は、この機能を呼び出す前に、ご自身の処理で明示的に正規化してください。監査記録が必要な場合は元の値も保持してください。先に整数へ変換すると、先頭のゼロが消えたり、長い値が丸められたりするため避けてください。
<code>true</code>は合計が10で割り切れること、<code>false</code>は構文上は正しいもののチェックサムが一致しないことを示します。入力エラーとfalseの判定は異なるため、通常は別々に修正または確認してください。
アプリケーションで決定的な検証を使う方法
数字列がシステムへ入る境界でご利用ください。たとえば、フォーム送信、バッチインポート、移行、テストデータ作成、統合テストなどです。対話型フォームでは、入力完了後にブラウザー版を実行し、この確認は入力ミスの可能性を検出するもので、アカウントの存在を証明するものではないと説明してください。
インポート処理では、数字以外の文字によるエラーを不正な書式のレコードとして扱い、falseの結果を、書式は正しいもののチェックサムが一致しないレコードとして扱います。両者を分けると、レポートが明確になり、有用な診断情報を保持できます。このアルゴリズムは決定的であり、ネットワーク、時刻、乱数を使用しないため、同じ入力からは常に同じ出力が得られます。
また、発行元ごとの長さや接頭辞の規則は適用しません。空でない数字列はすべて同じ計算で評価します。分野固有の長さ、接頭辞、所有者、リアルタイム状態の確認が必要な場合は、別途規則を適用してください。
活用例
入力ミスの検出
フォーム送信時に数字列を確認し、チェックサム不一致と、文字や記号を含む不正入力を区別できます。
バッチインポートの検証
後続処理へ渡す前に、受信した各レコードへ同じ決定的な規則を適用できます。
信頼できるテストデータの作成
ネットワークに依存せず、有効および無効な文字列が統合テストで一貫して動作することを確認できます。
よくある質問
有効という結果は何を意味しますか?
数字列がLuhnのmod-10チェックサムを満たすことを意味します。発行、所有者、アカウント状態、取引可否は確認しません。
空白やハイフンを入力に含められますか?
含められません。 数字だけを指定してください。書式付きの値は送信前に明示的に正規化してください。
先頭のゼロは保持されますか?
はい。 入力は文字列として扱われ、数値型へ変換されることはありません。
特定の桁数が必要ですか?
いいえ。 空でない任意の数字列を評価します。用途固有の桁数規則は別途適用してください。
Luhnのチェックはどのように計算しますか?
右端の数字はそのままにして、そこから左へ1つおきの数字を2倍します。2倍して2桁になったら9を引きます。すべてを足し、合計が10で割り切れれば合格です。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/math/luhn \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"number":"79927398713"}'const res = await fetch("https://api.kit.forhosting.com/math/luhn", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"number": "79927398713"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/luhn",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"number": "79927398713"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/luhn", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"number":"79927398713"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"number":"79927398713"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/luhn", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"number": "79927398713"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.luhn",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
手動確認、テストデータ、インポート検査、反復可能なAPI処理にご利用いただけます。
入力の準備とエラーの読み分け方
<code>number</code>フィールドには、0から9までの文字だけで構成された空でない文字列を指定してください。正常な呼び出しでは、<code>valid</code>という真偽値フィールドを持つオブジェクトが返ります。
アプリケーションで決定的な検証を使う方法
API呼び出しには公開基本料金$0.002が適用されます。
技術的な質問
API呼び出しの料金はいくらですか?
各リクエストには公開基本料金$0.002が適用されます。ブラウザーでは同じ決定的な処理をローカルで実行できます。