ForHosting KIT · Developer Utilities

Polish NIP check digit

The nine digits 526104082 get the check digit 8, giving the NIP 526-104-08-28. Enter nine digits to complete a Polish tax number, or all ten to catch a mistyped or swapped digit before an invoice or supplier record is saved. 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
Nip
526104082
Calculation mode
Compute
You get
Input
526104082
Check digit
8
With check
5261040828
Formatted
526-104-08-28

The Polish tax identification number (NIP, Numer Identyfikacji Podatkowej) is a ten-digit code used on invoices, company registries, payroll files, and e-commerce tax fields across Poland. The last digit is a check digit derived from a fixed weighting of the first nine digits under the standard modular rule used by Polish tax systems. A single mistyped digit or a swapped pair often breaks that checksum, so validating the NIP before posting an invoice, opening a supplier record, or accepting a partner file catches many keying errors early.

What the Polish NIP check digit is and how the weights work

A NIP identifies taxpayers and legal entities in Polish fiscal, commercial, and administrative workflows. Printed forms often group digits with hyphens such as XXX-XXX-XX-XX, but the underlying value is always ten decimal digits. The first nine digits form the body; the tenth is completely determined by a public check algorithm and is not chosen freely by the taxpayer.

The official weighting multiplies those nine digits, left to right, by the fixed sequence six, five, seven, two, three, four, five, six, and seven. The products are summed, and the remainder of that sum modulo eleven is the candidate check digit. When the remainder is a value from zero through nine, that value is the check digit and completes a well-formed NIP string.

When the remainder is ten, no single decimal check digit exists for that body: the nine-digit combination is not assignable as a valid NIP under the standard rule. That special case is why some random nine-digit strings never appear as real tax numbers even before any registry lookup. Compared with Luhn mod-ten used on payment cards, the NIP scheme uses a fixed left-to-right weight vector and modulo eleven, so you must not reuse a Luhn validator on Polish tax ID fields.

Compared with Spanish DNI letter tables or Argentine CUIT weights, the Polish NIP rule is specific to this ten-digit layout and these nine multipliers. Knowing which scheme you need avoids false confidence when a general check-digit utility accepts a digit string that is not a well-formed NIP. This tool implements the standard weighting on pure digits after optional hyphen and space stripping.

It does not query government portals, prove that a company exists, or assign a type code — only that the digit string is consistent under the published check algorithm.

Where Polish NIP check digits fit tax, invoicing, and commercial workflows

Electronic invoicing and billing systems store a customer or vendor NIP on every legal document; a single mistyped digit during onboarding can send fiscal XML to the wrong party or fail authorization later. E-commerce checkouts that collect a Polish company tax ID for B2B orders can recompute the check digit without calling an external registry, filtering OCR noise and partial captures early.

Product teams that already expose general Luhn or ISO 7064 check tools should still use this NIP-specific capability for Polish tax ID fields so weights, length bounds, and hyphen formatting match the domain. Educational and SEO landings that rank for phrases such as polish nip check digit or poland nip validator need a live free tool whose browser path matches automation so tutorial screenshots stay accurate.

Do not treat a passing NIP check digit as proof that the person or company is correctly identified, active with the tax office, authorized to invoice, or present in any official registry — it only proves the digit string is consistent under the Polish NIP check algorithm.

Audit NIP columns in partner and invoice files

Batch-validate every NIP in a CSV import and quarantine rows whose check digit no longer matches the recomputed expected value.

How is the Polish NIP check digit calculated?

Multiply the first nine digits by the weights 6, 5, 7, 2, 3, 4, 5, 6, and 7, sum the products, and take the sum modulo 11. If the remainder is 0–9 that is the check digit; if it is 10 the body is not a valid NIP base.

What is the difference between compute and validate modes?

Compute takes nine digits and returns the check digit and full ten-digit NIP. Validate takes ten digits including the trailing digit and returns whether it matches the recomputed check digit.

What happens if the check digit is wrong?

In validate mode the response still includes the expected digit when one exists, and valid is false.

Why do some nine-digit numbers have no valid NIP check digit?

When the weighted sum divided by eleven leaves a remainder of ten, no single digit can complete it. That body can never be a valid NIP, so the tool reports it instead of inventing a digit.

Does a valid NIP prove that the company exists?

No. A valid result only shows that the ten digits follow the official check. The tool does not consult government portals or company registers, so it cannot confirm who the taxpayer is.

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/nip-poland

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/nip-poland \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"nip":"526104082"}'
{
  "nip": "526104082"
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "enc.nip_poland",
  "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.

This capability computes the Polish NIP check digit for a nine-digit payload (with or without common hyphens), or validates a full ten-digit number that already includes the trailing digit, and it reports bad input instead of silently inventing a digit. Use it free in the browser or call the KIT API at the published price; both paths run the same deterministic arithmetic with no network lookup and no registry of real taxpayers.

How to compute a check digit or validate a full NIP

Send a nip field that contains digits zero through nine, optionally separated by hyphens or spaces. Mode validate expects a complete ten-digit number including the trailing check digit (for example 5261040828 or 526-104-08-28). Empty strings, missing nip, invalid mode values, and wrong lengths fail before any weighted sum runs and are not billed. Letters, other punctuation, double hyphens, or leading or trailing hyphens are rejected as malformed input with invalid_input so you never accept a silently cleaned value. Mode compute is the default: provide exactly nine digits without the check digit (for example 526104082 or a hyphenated nine-digit body), and the engine returns check_digit as a one-character string, with_check as the full ten-digit string including that digit, and formatted as the common XXX-XXX-XX-XX display form. If the weighted sum modulo eleven equals ten, compute mode fails with invalid_input because no valid trailing digit exists for that body. The response reports valid true when the recomputed check digit matches the last digit, and always includes check_digit, payload without the last digit, weighted_sum_mod11, and formatted for consistent display; when a valid expected digit exists it is also returned as expected_check_digit. 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 gate bulk supplier imports, onboarding forms, and ETL jobs without negotiating a custom tier. Prefer compute when you assemble a NIP from a known nine-digit body; prefer validate when a user, partner file, or scanned label supplies a full number and you need a boolean gate before a registry or master-data lookup.

Where Polish NIP check digits fit tax, invoicing, and commercial workflows

Validate mode at entry blocks the save when valid is false and can show expected_check_digit so the clerk corrects the form before the record is written. Payroll, accounting, and CRM imports receive partner NIPs from spreadsheets where a wrong trailing digit would reject a whole batch; a deterministic oracle that returns valid and with_check lets importers flag rows before they hit production.

Gate NIP fields on supplier and customer forms

When a user submits a full Polish NIP, call validate mode and block the save when valid is false, showing expected_check_digit to help correct a single mistype before the ERP record is written.

Compute the trailing digit when completing IDs

From a nine-digit body, call compute mode and store with_check or formatted so every new NIP string carries the correct trailing digit before print, export, or invoice generation.

Are hyphens and spaces allowed?

Yes. Common separators are stripped before parsing. Letters, other punctuation, and broken hyphen patterns are rejected with invalid_input.

What does the Polish NIP check digit calculator cost?

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 →