ForHosting KIT · Developer Utilities

Germany tax ID check digit

Enter the first ten digits of a German Steuer-ID, such as 8609574271, and get its check digit, 9, plus the full number 86095742719. Or paste a complete IdNr to see whether its last digit is right. Free in your browser.

  • Free
  • Runs in your browser
  • No sign-up
  • Your data stays on your device
Use it from WebAPIEmailTelegramApp soon
If you enter
Number
8609574271
You get
Calculation mode
Compute
Input
8609574271
Check digit
9
With check
86095742719

The German tax identification number—steuerliche Identifikationsnummer, often shortened to Steuer-ID or IdNr—is the lifelong eleven-digit personal tax reference issued by the Federal Central Tax Office (Bundeszentralamt für Steuern). Employers, banks, insurers, and public portals ask for it on payroll forms, investment accounts, and digital tax filings. The trailing digit is not arbitrary decoration: it is produced by an ISO 7064-style iterated product-sum over the first ten digits so that a single mistype is usually rejected before the number is stored or matched against a master record. This capability implements that checksum only. Compute mode accepts the ten-digit body without the check digit and returns the expected digit plus the completed eleven-digit string. Validate mode accepts a full eleven-digit IdNr (optional spaces or hyphens) and reports whether the trailing digit matches the recomputed value.

How the German Steuer-ID check digit is calculated

The running product starts at ten. After the tenth digit, the check digit is eleven minus the final product; if that value is ten the stored check digit is zero. Validation recomputes the expected digit from the first ten digits and compares it to the eleventh character of the submitted number.

The first digit of a real IdNr is never zero, and this tool rejects a leading zero before any arithmetic so test data that looks like a padded string cannot pass as an official number. The algorithm is deterministic and local: no population registry call, no clock, and no randomness.

Compared with generic Luhn or mod-11 tools for cards and barcodes, the search intent here is narrow: people who need a Germany tax ID check digit calculator, a Steuer-ID Prüfziffer tool, or an Identifikationsnummer validator for eleven-digit German personal tax numbers, not a payment, device, or multi-country tax format hub.

Where German tax ID check digits fit real workflows

Employers and payroll vendors validate eleven-digit Identifikationsnummer values when onboarding employees so a single transposition does not create a rejected ELStAM or Lohnsteuer file. ETL jobs that load German customer or employee master files walk every tax-id column in a CSV or XML feed, call validate mode, and quarantine rows where valid is false—catching both human edits and off-by-one bugs in generators. Public-sector portals often accept both spaced and compact forms; stripping spaces and hyphens before the digit check keeps the contract simple without inventing a second algorithm.

Do not treat a passing Steuer-ID check as proof that the holder is alive in the Federal Central Tax Office register, has a German residence, or is authorized for a service; it only proves the ISO 7064-style check digit is consistent with the first ten digits under the official German Identifikationsnummer algorithm.

Audit Steuer-ID columns in master data

Batch-validate every German tax identification number in an HR, ERP, or bookkeeping CSV and quarantine rows whose check digit no longer matches the recomputed expected value.

What is a German tax ID check digit?

It is the eleventh digit of the German personal tax identification number (steuerliche Identifikationsnummer / Steuer-ID), computed with an ISO 7064-style iterated product-sum over the first ten digits so typing and scanning errors are usually caught before the number is stored.

How is the Steuer-ID check digit calculated?

A running product starts at 10. Each of the first ten digits is added to it, the sum keeps only its remainder after dividing by 10 (a zero counts as 10), is doubled, and keeps its remainder after dividing by 11. The check digit is 11 minus the final product; a 10 becomes 0.

Does a valid check digit prove a tax ID is real?

No. It only shows that the last digit fits the first ten. It says nothing about whether the person is in the Federal Central Tax Office register, lives in Germany or is entitled to any service.

Can I type the number with spaces or hyphens?

Yes. Spaces and hyphens are removed before the check, so 86 095 742 719 gives the same answer as the compact form. Any other punctuation is refused instead of being quietly dropped.

Why is a tax ID starting with zero rejected?

Because a real Identifikationsnummer never begins with 0. The tool turns a leading zero away before doing any arithmetic, so padded test numbers cannot pass as an official one.

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.

POSThttps://api.kit.forhosting.com/enc/steuer-id-germany

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.

curl -X POST https://api.kit.forhosting.com/enc/steuer-id-germany \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"number":"8609574271"}'
{
  "number": "8609574271"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "enc.steuer_id_germany",
  "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.

Per request$0.002

Published price — no tokens, no invented credits. A failed task is never charged.

HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.

Non-numeric bodies, wrong lengths, and a leading zero fail with invalid_input instead of silent stripping. The same pure arithmetic runs free in the browser and at the published API price, with no registry lookup and no claim that a valid checksum means the person is registered, resident, or entitled to any service.

How the German Steuer-ID check digit is calculated

Under the official German Identifikationsnummer rules published for the Bundeszentralamt für Steuern scheme, the check digit is an iterated product-sum in the ISO 7064 MOD 11,10 family applied to exactly ten payload digits. For each payload digit from left to right, add the digit to the current product, reduce that sum modulo ten, replace a zero result with ten, multiply by two, and reduce modulo eleven to obtain the next product.

Input contract, modes, and error behaviour

Send a number field that contains the German tax ID body. Mode compute is the default: the engine accepts exactly ten digits without the check digit. Wrong length is an explicit error that names the mode and the length you sent—ten for compute, eleven for validate—so client forms can show a precise message without guessing. Empty strings, missing number, invalid mode values, and a leading zero fail before or instead of a successful checksum and are not billed. A well-formed eleven-digit string that simply has the wrong check digit returns valid false without throwing. Spaces and hyphens are stripped so common display forms with grouped digits are accepted after normalization; other punctuation and letters are rejected as non-numeric input with invalid_input so a silently stripped value never reaches storage. On success it returns check_digit as a one-character string, with_check as the completed eleven-digit Identifikationsnummer, payload as the ten base digits, length eleven, and algorithm set to germany-steuer-id-iso7064-iterated. Mode validate accepts exactly eleven digits; the response reports valid true when the trailing digit matches the recomputed expected_check_digit, and always includes payload, check_digit, expected_check_digit, and length. Alias keys such as steuer_id, idnr, tin, digits, and code are accepted for the same payload field so integrations that already speak German or English field names do not need a rename. Because the path is pure parse with no clock, random source, or network, the same JSON body always yields the same JSON result on the free browser tool and on the API at $0.002 per successful request.

Where German tax ID check digits fit real workflows

Banks and fintechs recompute expected_check_digit when a customer pastes a Steuer-ID from a letter or types it into an account-opening form, catching mistypes before KYC storage. Tax advisors and bookkeeping tools complete ten-digit bases in sandboxes with compute mode, then store with_check for demo clients that must look like production identifiers.

Complete a 10-digit Steuer-ID base for test fixtures

Call compute mode with ten payload digits, store check_digit or with_check, and use the result in sandbox payroll, bank KYC, or tax-portal test records that must look like real German Identifikationsnummer values.

Validate typed or imported German tax IDs

When a form, payroll file, or CRM feed submits eleven digits, call validate mode and block enrollment when valid is false, showing expected_check_digit to help correct a single mistype.

How do I compute a Steuer-ID check digit with this API?

POST with number set to exactly ten digits (no leading zero) and mode compute (or omit mode). The response includes check_digit and with_check (the full eleven-digit Identifikationsnummer).

How do I validate a full eleven-digit German tax ID?

POST with the digit string (optional spaces or hyphens) and mode validate. The response includes valid, check_digit, expected_check_digit, and payload (the ten base digits).

What happens with wrong length, letters, or a leading zero?

After stripping spaces and hyphens, non-numeric input, a leading zero, and lengths other than ten (compute) or eleven (validate) are rejected with invalid_input. Failed validation tasks are not billed.

Is the Germany tax ID check digit tool free?

The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.

Read the full KIT documentation →