Luhn mod-10 チェックディジット
7992739871のLuhnチェック桁は3で、番号は79927398713になります。決済カードと同じmod-10の規則を、会員番号や倉庫のコード、製造番号などあらゆる数字列に使えます。チェック桁付きの番号の検証もでき、ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 数
- 7992739871
- 計算モード
- Compute
- 入力
- 7992739871
- チェックディジット
- 3
- チェックディジット付き
- 79927398713
長い口座コード、IMEI の一部、会員番号、社内シリアルは打ち間違えやすいものです。Luhn アルゴリズム(mod-10 チェックディジット方式とも呼ばれます)は末尾に 1 桁を付け、ほとんどの 1 桁の置換と多くの隣接転置でチェックサムが破れるようにします。決済カード専用の検査とは異なり任意の桁数を受け付けるため、倉庫 SKU、ロイヤルティ ID、一括ラベルを、業界がカードで信頼しているのと同じ規則で保護できます。どちらの経路も同じ純粋な算術を使い、ネットワークも番号の保存もありません。
Luhn mod-10 アルゴリズムが行うことと検出するもの
チェックディジットが存在する理由は、人とキーボードが予測可能な損傷を入れるからです。誤ったキー 1 つ、隣り合う 2 桁の入れ替え、再入力時の桁の挿入や欠落です。Hans Peter Luhn は右から左へ進む単純な手順を発表し、1 つおきに桁を 2 倍し、9 を超える値は 9 を引いて縮小し、合計し、合計が 10 で割り切れるように末尾桁を選びます。
この構成はすべての 1 桁誤りと大半の隣接転置を捉えるため、決済ネットワーク、通信識別子、無数の社内口座形式が何十年も後も依然としてこれに依存しています。本ツールはその標準的な走査を任意の純粋な数字列に実装します。独自変種でもカード網の BIN パーサでもありません。
応答は常にアルゴリズムを luhn と名付けるため、下流システムはどの方式が値を保護したかを記録できます。既存の mod-10 システムとの相互運用が、最後の転置対まで捉えることより重要なら Luhn を使ってください。
実システムでの Luhn チェックディジットの位置づけ
会員・ロイヤルティプログラムは連番または乱数の数値 ID を発行し、コールセンター担当者とモバイルキーボードが黙って壊さない末尾桁を必要とします。倉庫・物流チームはカートンや資産コードを印刷します。携帯端末経路での 1 桁の打ち間違いはよくあり、Luhn はすべての 1 桁置換を捉えます。
IMEI 等をすでに mod-10 形式で扱う通信・デバイスの流れは、カード専用 UI なしに再計算と検証ができます。結合テストとデータ品質ジョブは CSV エクスポートの各行で期待チェックディジットを再計算し、保存された完全番号が一致しなくなった行をフラグし、人手の編集と生成器の off-by-one の両方を捉えます。
支払い UX 用にカード Luhn 検証を既に出す製品チームでも、同じアルゴリズムが必要だが入力が PAN ではない社内識別子には、この汎用ツールを採用できます。どの流れでも契約は同じです。合格した Luhn チェックを認可・所有権・カードが本物であることの証明と見なさないでください。
このアルゴリズム下で数字列が整形式であることだけを示し、任意のチェックサムに適用するのと同じ誠実さの基準です。
活用例
エクスポートした ID 列の監査
取引先 CSV や倉庫エクスポートの数値 ID を一括検証し、チェックディジットが再計算した期待値と一致しなくなった行を隔離します。
よくある質問
Luhn mod-10 チェックディジットとは何ですか?
Hans Peter Luhn の 2 倍アルゴリズムで計算する末尾 1 桁で、完全な番号の重み付き桁和が 10 で割り切れるようにし、ほとんどの 1 桁誤りと多くの転置タイプミスを捉えます。
文字・空白・ハイフンがある場合は?
桁 0-9 のみを指定してください。失敗した検証タスクは課金されません。
Luhn チェックディジットツールは無料ですか?
ブラウザツールは無料でローカル実行です。無効入力は課金されません。
Luhnのチェック桁はどんな打ち間違いを見つけますか?
1桁の誤りはすべて、隣り合う2桁の入れ替わりもほとんど見つけます。番号を打ち直すときに最も多い2つの間違いです。一部の入れ替わりは見逃しますが、既存のmod-10の仕組みと互換を保つための割り切りです。
Luhnで正しい番号なら、カードや口座は本物ですか?
いいえ。検査に通っても、数字列がLuhnの規則どおりに作られていることが分かるだけです。利用の権限や持ち主、カードが実在するかは証明できないため、打ち間違いの確認として使ってください。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/enc/luhn \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"number":"7992739871"}'const res = await fetch("https://api.kit.forhosting.com/enc/luhn", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"number": "7992739871"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/luhn",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"number": "7992739871"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/luhn", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"number":"7992739871"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"number":"7992739871"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/luhn", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"number": "7992739871"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
本機能は、すでにお持ちの純粋な数字のペイロードに対してその桁を計算するか、すでに桁を含む完全な番号を検証し、ハイフンや文字を黙って取り除くのではなく、非数値入力を明確なエラーで拒否します。ブラウザで無料実行するか、公開価格で KIT API を呼び出してください。
Luhn mod-10 アルゴリズムが行うことと検出するもの
チェックディジットは 1 文字の文字列として、桁を付けた完全な番号、またはペイロードだけから再計算した期待チェックディジット付きの真偽フラグとして得られます。Damm の準群チェックディジットと比べると、Luhn はカード状・口座状フィールドの業界事実上の標準です。バーコード族(EAN、UPC、ISBN)のチェックディジットと比べると、Luhn は小売 GTIN レイアウトに縛られず、選んだ任意の数字ペイロードに適用されます。これらのトレードオフを知ることで適切な方式を選べます。
チェックディジットの計算と完全な番号の検証の方法
mode compute が既定です。空文字列、欠落した number、無効な mode 値は 2 倍処理の前に失敗し、課金されません。新しい ID を発行するときは compute を、ユーザー・取引先ファイル・スキャン済みラベルから ID を受け取り参照前に真偽ゲートが必要なときは validate を優先してください。number フィールドには 0 から 9 の文字だけを送ってください。空白、ハイフン、文字、小数点、科学的記数法は invalid_input として非数値入力で拒否され、黙って切り取られた値を受け入れることはありません。エンジンは末尾にチェックディジットが付くものとしてペイロードを右から走査し、check_digit を 1 文字の文字列で、with_check をペイロードとその桁として返し、1 本の文字列として保存や印刷ができます。mode validate は少なくとも 2 桁の完全な番号(ペイロード 1 桁以上と末尾チェックディジット)を期待します。応答は、重み付き合計が 10 で割り切れるときに valid を true とし、常に末尾の check_digit、ペイロードだけから再計算した expected_check_digit、最後の桁を除いた payload 部分文字列を含めます。この形により、フォームで「入力 X、期待 Y」を 2 回目の呼び出しなしで示せます。経路は時計・乱数・ネットワークのない純粋な parse のため、同じ入力は無料ブラウザツールと API で常に同じ JSON になります。成功リクエストあたり $0.002 で、一括取込、オンボーディングフォーム、ラベル印刷機をカスタム階層なしに保護できます。
連携の活用例
会員・口座 ID の発行
連番ペイロードを生成し、mode compute を呼び出し、with_check を保存して、新しい ID すべてに Luhn 末尾桁を付けてからカード印刷や会員へのメール送付を行います。
入力時に手入力・スキャン済みコードを検証
ユーザーやスキャナが完全な番号を送ったら mode validate を呼び、valid が false のとき参照を止め、expected_check_digit を示して 1 回の打ち間違い修正を助けます。
技術的な質問
この API で Luhn チェックディジットを計算するには?
number にペイロード桁を、mode compute を指定して POST します(mode は省略可)。応答に check_digit と with_check(ペイロード+チェックディジット)が含まれます。
すでにチェックディジットがある番号を検証するには?
完全な数字列と mode validate で POST します。応答に valid、check_digit、expected_check_digit、最後の桁を除いた payload が含まれます。