NIP & PESEL Validator
Validate Polish NIP (tax ID) and PESEL (personal ID) numbers. Extract birth date, gender, and age from PESEL. Check NIP checksum. Free online validator
NIP and PESEL validation is not just "check the length" — both numbers carry checksums, and PESEL additionally encodes date of birth and sex. This validator checks the checksum using the official GUS algorithms — NIP weights 6,5,7,2,3,4,5,6,7, PESEL weights 1,3,7,9,1,3,7,9,1,3 — decodes the date of birth from PESEL (with the historical month-offset trick that distinguishes 19th, 20th, 21st, and 22nd century births), and extracts sex and age. Everything runs locally in your browser; the NIP or PESEL you paste never reaches a server.
How the NIP checksum works
NIP (Numer Identyfikacji Podatkowej, Polish Tax Identification Number) is 10 digits. The first 9 identify the taxpayer; the 10th is a checksum computed as: multiply each of the first 9 digits by weights (6, 5, 7, 2, 3, 4, 5, 6, 7), sum, take modulo 11. The result is the check digit. If modulo 11 equals 10, the NIP is invalid by definition — such a combination is never issued.
NIP carries no information about region or industry (since the 2009 reform — prior to that, the first 3 digits indicated the tax office). In 2026 the first 3 digits are assigned sequentially without semantic meaning. The official format is 123-456-78-90 or 1234567890 — separators are cosmetic only.
PESEL digit by digit
- Digits 1-2 (YY) — last two digits of the year of birth.
- Digits 3-4 (MM) — month of birth with century offset: 01-12 → 20th century (1900-1999); 21-32 → 21st century (2000-2099); 41-52 → 22nd century (2100-2199); 61-72 → 19th century (1800-1899); 81-92 → 22nd century alternate. Historical accident, not elegant design.
- Digits 5-6 (DD) — day of month (01-31).
- Digits 7-10 (SSSS) — sequential birth number for that day. The 10th digit encodes sex: even = female, odd = male.
- Digit 11 (K) — checksum. Multiply digits 1-10 by weights 1,3,7,9,1,3,7,9,1,3, sum, take modulo 10, subtract from 10. That is the check digit. Exception: if the result is 10, the check digit is 0.
Working example: full PESEL validation
Input
PESEL: 90090515836
Output
Decoding: YY: 90 → year MM: 09 → 09-12 → 20th century → 1990, September DD: 05 → day 5 SSSS: 1583 → sequence; last digit 3 (odd) → male Date of birth: 1990-09-05 Age (as of 2026-05-15): 35 years, 8 months, 10 days Sex: male Checksum: 9·1 + 0·3 + 0·7 + 9·9 + 0·1 + 5·3 + 1·7 + 5·9 + 8·1 + 3·3 = 9 + 0 + 0 + 81 + 0 + 15 + 7 + 45 + 8 + 9 = 174 174 mod 10 = 4 10 − 4 = 6 Expected check digit: 6 Actual last digit: 6 ✓ PESEL is valid.
PESEL is "fictional" only by checksum — in the state registry, the first 6 digits are the date of birth, and the last 4 are the sequence-of-day plus checksum. Any generator that produces a valid-checksum PESEL may accidentally hit an existing real one — only use these in tests, never in production systems.
What the tool checks and what it does not
- Checks — that the NIP/PESEL has a valid checksum and structure. That the date of birth in PESEL is plausible (no Feb 32).
- Checks — sex and age extracted from PESEL match user expectations (e.g., someone claiming to be 25 did not paste a PESEL from 1953).
- Does NOT check — whether the NIP exists in the CEIDG/KRS registry. That requires a query to the Polish White List of VAT taxpayers API (https://wl-api.mf.gov.pl/) or GUS REGON.
- Does NOT check — whether the PESEL belongs to a specific person. This verification cannot be done — PESEL is confidential and knowing the number alone does not identify or authorize a person.
- Does NOT detect — PESELs with wrong century encoding (a 90-year-old whose PESEL month digits 21 suggest the year 2090). The number is formally valid; semantically suspicious.
When to reach for this tool
- You are importing a large batch of customer data and want to filter typos in NIP/PESEL before sending to the accounting system.
- You are writing a registration form and need a reference implementation for the client-side validator (before the request goes to the API).
- You are checking whether an invoice from a counterparty was issued under a valid NIP — before deducting VAT (this is checksum only; White List verification is a separate step).
- You are generating test data and want to understand how a PESEL structure encodes the date of birth.
What this tool will not do
- It will not connect to the state registry to verify "does this NIP/PESEL exist". That requires authenticated queries to government APIs (White List of VAT taxpayers, BIR REGON).
- It will not validate other documents (REGON, KRS, ID card number). REGON has its own checksum; KRS is just a number with no checksum; an ID card number (3 letters + 6 digits) has its own algorithm — all outside the scope of this specific validator.
- It does not consider historical context (NIPs issued before 2009 vs after). Checksum validation is independent of issue date.
All validation happens locally in your browser. NIP, PESEL, and any other data pasted into the validator are never sent to any server. If you are validating data for many people, you can do it without GDPR/leak concerns.
Frequently asked questions
Why do some PESELs from 1900-1999 have months 81-92?
A historical artifact. In the early years of the PESEL system (1970s) months 81-92 indicated the 19th century (1800-1899) because no one was thinking about the 21st century yet. Later (around 1980) for people born in the 20th century, the convention was set to months 01-12, with the "exceptional" ranges retained for 19th-century births, and adding 21-32 for the 21st century. Validators serving all Polish citizens must know both mappings.
Is knowing someone's PESEL dangerous?
The PESEL number alone does not enable most operations. But in combination with other data (ID card number, date of birth, residence), it is sufficient for fraud — e.g., taking out an online loan in someone else's name. That is why PESEL is treated as sensitive personal data and should not be included in unencrypted documents.
Do natural persons and companies have differently-formatted NIPs?
No. The structure is identical — 10 digits with a checksum. The difference is in the register the entity is recorded in (PESEL → natural person not running a business, NIP → person running a business or company). Since 2011, natural persons not running a business do not have a NIP at all — they use PESEL for tax purposes.
Can I validate a PESEL without exposing it to the application?
In this tool �� yes. Validation is client-side; PESEL does not leave the browser. In production systems, if the server only needs the number for validation, you can validate in the browser and send only a boolean ("PESEL valid / invalid") — reducing the attack surface. Most accounting systems still store the PESEL in the database for record-keeping.
How do I generate a "test" PESEL with a valid checksum?
Pick a date of birth, set digits 7-10 freely, then compute the checksum per the algorithm above. Caveat: any generated PESEL with a valid checksum could accidentally belong to a real person. For testing, prefer specific reserved ranges (e.g., starting with 11111...) and mark records explicitly as test data in your system.
Does NIP include a country code like a VAT-UE number?
The bare NIP — no. EU VAT-format NIP (for intra-EU transactions) is the NIP prefixed with "PL". So Polish EU VAT: "PL1234567890". The Polish format on an EU invoice must include "PL" — without it, the number is not recognized as an EU VAT identifier.
Related tools
Validate International Bank Account Numbers (IBAN). Check format, country, checksum. Identify bank from IBAN. Support for 80+ countries
Create professional PDF invoices with logo, line items, taxes, and totals. Free online invoice maker, no registration required. Export to PDF instantly
Generate fake names, emails, addresses, phone numbers for testing. Create realistic test data in JSON/CSV. Free mock data generator online
Real-time currency converter with live exchange rates. Convert USD, EUR, GBP, PLN, JPY and 150+ world currencies. Free forex calculator online
Generate valid test credit card numbers for development. Visa, Mastercard, Amex, Discover. Luhn-valid numbers for payment testing. Free fake card generator
Decode Vehicle Identification Numbers (VIN). Find manufacturer, country, model year, plant code, serial number. Free online VIN lookup and validator
Last updated · E-Utils editorial team