ISO 7064 mod-11 check digit
For 079 the ISO 7064 MOD 11-2 check character is 4, giving 0794; when the result is ten, the check is written as X so every value has one printable symbol. Validate mode checks codes that already end in their check. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Number
- 079
- Calculation mode
- Compute
- Input
- 079
- Check digit
- 4
- With check
- 0794
Long account codes, registry numbers, and internal identifiers are easy to mistype. ISO 7064 pure system MOD 11-2 appends a single check character so that a wrong digit or a corrupted trailing character fails validation under a standard modular walk. Unlike simple mod-10 schemes, this algorithm uses radix two and modulus eleven, and it encodes the value ten as the letter X so every legal remainder has a printable character.
What ISO 7064 MOD 11-2 is and why X appears
ISO/IEC 7064 defines pure and hybrid check-character systems used in standards that need a compact, interoperable trailing symbol. The pure system MOD 11-2 walks the input left to right with the recurrence p equals two times p plus the current digit value, all modulo eleven. Values zero through nine print as digits; the value ten prints as the letter X, which is why registries and forms sometimes show a trailing X on an otherwise numeric code.
That design is not a house variant of Luhn or Damm: it is the published pure MOD 11-2 construction, chosen because modulus eleven needs eleven symbols and the Latin X is the conventional stand-in for ten. Compared with barcode family check digits such as EAN or UPC, MOD 11-2 is not tied to a retail GTIN layout. Compared with the Damm algorithm, it uses modular arithmetic rather than a quasigroup table and can emit X instead of a digit-only tail.
Compared with the classic ISBN-10 weighted sum, the pure system processes left to right with a fixed radix instead of position-dependent weights from ten downward.
Where mod-11 check digits fit real systems
National and industry registries that already publish ISO 7064-style identifiers need a single shared oracle for minting and checking trailing characters, including the occasional X. Membership and loyalty programs that want a stronger modulus than ten can append MOD 11-2 without inventing a private alphabet. Warehouse and logistics teams print carton or asset codes where a single mistyped digit should fail at scan time rather than route stock to the wrong bin.
Healthcare and education offices that still move paper forms with multi-digit reference numbers can validate on entry and show the expected check character when the typed tail does not match. Integration tests and data-quality jobs recompute the expected check character for every row in a CSV export and flag rows where the stored full value no longer matches, which catches both human edits and off-by-one bugs in generators.
Document which algorithm you store next to the number so you never mix Luhn, Damm, and MOD 11-2 on the same column without noticing.
What you can do with it
Audit exported ID columns
Batch-validate every numeric-or-X ID in a partner CSV or warehouse export and quarantine rows whose check character no longer matches the recomputed expected value.
FAQ
What is an ISO 7064 mod-11 check digit?
It is a single trailing character from ISO/IEC 7064 pure system MOD 11-2: digits 0-9 or X for ten, chosen so the full left-to-right modular walk ends at remainder one.
What happens with letters, spaces, or hyphens?
Provide digits 0-9 only; a trailing X is allowed only in validate mode as the check character. Failed validation tasks are not billed.
Is the mod-11 check digit tool free?
The browser tool is free and runs locally.
Why does a mod-11 check character sometimes show X?
Because modulus eleven needs eleven symbols: the values zero to nine print as digits, and the value ten prints as the letter X. That is why some registry numbers end in X, and X is only accepted as that last character.
How is the MOD 11-2 check character worked out?
Walk the digits from left to right: add each digit to the running value, double it and keep the remainder after dividing by eleven. The check character is the one that makes the complete walk end at one; for 079 it is 4.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/enc/mod11 \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"number":"079"}'const res = await fetch("https://api.kit.forhosting.com/enc/mod11", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"number": "079"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/mod11",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"number": "079"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/mod11", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"number":"079"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"number":"079"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/mod11", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"number": "079"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.mod11",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
This capability computes that check character for a numeric payload you already have, or validates a complete string that already includes one, and it rejects non-numeric input with a clear invalid_input error instead of stripping garbage. Run it free in the browser or call the KIT API at the published price; both paths share the same pure arithmetic with no network and no stored numbers.
What ISO 7064 MOD 11-2 is and why X appears
After the payload is processed, the check character is the unique value in zero through ten that makes the full walk finish at remainder one. This tool implements that standard walk and always names the algorithm as iso7064-mod11-2 in the JSON so downstream systems can record which scheme protected the value. Use it for any pure digit payload you control; do not assume a passing check proves authorization or ownership, only that the string is well formed under this rule.
How to compute a check character or validate a full value
Send a number field that contains only characters zero through nine for compute mode. Empty strings, missing number, invalid mode values, and X in any position other than the trailing check fail before the walk completes and are not billed. Spaces, hyphens, letters other than a trailing X in validate mode, decimal points, and scientific notation are rejected as non-numeric input with invalid_input so you never accept a silently stripped value. Mode compute is the default: the engine walks the payload through the MOD 11-2 recurrence, returns check_digit as a one-character string (digit or X), and returns with_check as the payload plus that character so you can store or print a single string. Mode validate expects a full value of at least two characters: one or more payload digits plus a trailing check character that is a digit or X. The response reports valid true when the full walk ends at interim one, and always includes the trailing check_digit, the expected_check_digit recomputed from the payload alone, and the payload substring without the last character. That shape makes it easy to show you typed X, expected Y in a form without a second call. Because the path is pure parse with no clock, random source, or network, the same input always yields the same JSON on the free browser tool and on the API. At $0.002 per successful request you can protect bulk imports, onboarding forms, and batch label printers without negotiating a custom tier. Prefer compute when you mint new IDs; prefer validate when you receive an ID from a user, a partner file, or a scanned label and need a boolean gate before looking up the record.
Where mod-11 check digits fit real systems
Product teams that already use Luhn for card-like fields or Damm for internal digit-only IDs can still adopt MOD 11-2 where an existing partner specification or historical schema demands it, including the X case.
Integration use cases
Mint IDs with an ISO 7064 check character
Generate a sequential or random digit payload, call compute mode, and store with_check so every new ID carries a MOD 11-2 trailing character (digit or X) before it is printed or emailed.
Validate typed or scanned codes at entry
When a user or scanner submits a full value, call validate mode and block lookup when valid is false, showing expected_check_digit to help correct a single mistype.
Technical questions
How do I compute a mod-11 check digit with this API?
POST with number set to the payload digits and mode compute (or omit mode). The response includes check_digit (0-9 or X) and with_check (payload plus check character).
How do I validate a number that already has a check character?
POST with the full string (digits plus trailing 0-9 or X) and mode validate. The response includes valid, check_digit, expected_check_digit, and payload without the last character.