Practical guide
How to check a Polish NIP and read the validation result
Checking a NIP copied from a document can catch an entry error, but a passing result is not proof of a business. This guide explains how to enter one number, read each technical check and choose the next step without guessing missing digits.
Enter the number, not the counterparty’s details
Enter one NIP and select “Check”. Spaces and ordinary hyphens are ignored. A PL prefix, letters, periods and non-ASCII lookalike digits are not removed. If your document shows PL before the number, enter only the domestic numeric part in this field.
Do not add a business name, address or invoice number. An empty field or more than 64 characters triggers a form error; other structural failures appear in the result. Keep the original document available for comparison instead of changing data merely to make the check pass.
Read format and checksum separately
The tool requires ten ASCII digits and applies the KSeF SDK pattern: a nonzero first digit, with digits two and three not both zero. This describes a technical pattern, not tax-office allocations or NIP issuance.
Example 1000000006 passes the arithmetic check alone but fails this validator’s format pattern. An all-zero string is not accepted either. Read every result row: a matching check digit does not cancel a format failure.
Source: Ministry of Finance / CIRFMF — KSeF SDK NIP format (code reviewed 30 September 2026).
Worked example: 1010000002
Multiply the first nine digits by 6, 5, 7, 2, 3, 4, 5, 6, 7. The sum modulo 11 must match the last digit; remainder 10 fails. For 1010000002, the sum is 13 and the remainder is 2.
The table contains our arithmetic examples, not verified business records. Body 101000009 gives sum 76 and remainder 10: no final digit makes that body pass. Never replace the identifier in a document with an example from this guide.
| Input string | Sum / remainder | Expected result |
|---|---|---|
| 1010000002 | 13 / 2 | Structure passes |
| 1010000003 | 13 / 2 | Checksum fails |
| 1000000006 | 6 / 6 | SDK format fails |
| 1010000090 | 76 / 10 | Checksum fails |
Source: Ministry of Finance / CIRFMF — KSeF SDK NIP checksum (code reviewed 30 September 2026).
What to do when a check fails
Compare digit count and order with the source document. Check whether you pasted a prefixed VAT identifier or surrounding text. The validator does not fill missing characters or automatically suggest a replacement last digit.
If the number still fails, ask the document issuer to clarify it. Changing a digit yourself can create a different structurally passing string, not the correct identifier for that counterparty. For software tests, use the separate test-data generator.
NIP validation does not check VAT status
An official check may still be needed after technical validation. The VAT register supports a NIP lookup for a selected day and retaining the query confirmation. Follow the KAS instructions in the sources; this validator does not perform that lookup.
Do not interpret “Structure passes” as VAT registration, bank-account ownership, business activity or eligibility for a tax treatment. The microaccount generator does not identify a counterparty either. Choose the service that answers your actual question and independently compare its records.
Source: Polish tax administration — using the VAT register (a separate check); Ministry of Finance — structural identifier checks, not issuance verification.
Local checks and safe error reports
The entered NIP and result stay in the browser, outside the URL, persistent storage and analytics. Copy and print are deliberate actions. “Clear” removes the result and form entries; reopening the page does not restore the identifier.
Report the browser, steps and expected result using a test example. Do not send an invoice or a real NIP together with counterparty details. Local checking does not remove clipboard, screenshot or shared-device risks.
Frequently asked questions
Does “Structure passes” mean the business exists?
No. The result covers digits, the SDK pattern and checksum without looking up a business. Counterparty records and any VAT status need a separate appropriate source.
Can I paste a NIP with a PL prefix?
This form expects the domestic numeric part. PL is not automatically stripped and will fail the check. Spaces and ordinary hyphens are accepted as formatting.
Will the validator repair a wrong digit?
No. Do not change an identifier in a real document based only on the algorithm. Compare the source and obtain correct details from its issuer; prepare test variants separately.
Is the identifier sent to analytics or browser storage?
Form entries and results stay local, without being added to the URL, localStorage, sessionStorage or analytics. Copy and print are user actions. Visiting the page still makes a normal hosting request; protect your device and clipboard too.
Official sources and scope
This guide explains technical checks, not issuance, identity, eligibility or tax-status verification. Examples illustrate arithmetic only and may coincide with issued identifiers. Do not use them in real documents, payments or accounts. These tools do not query registers.
- Ministry of Finance / CIRFMF — KSeF SDK NIP checksum (code reviewed 30 September 2026)
- Ministry of Finance / CIRFMF — KSeF SDK NIP format (code reviewed 30 September 2026)
- Ministry of Finance — structural identifier checks, not issuance verification
- Polish tax administration — using the VAT register (a separate check)
Tools covered by this guide
Polish tax microaccount generator
Microaccount with PESEL date and checksum checks; verify with the Ministry.
Polish NIP validator
Check NIP structure and checksum locally, without verifying issuance or ownership.
Test NIP generator
Create 1–20 test NIP strings with passing or deliberately failing checksums.