Practical guide
How to check a Polish PESEL, encoded date and checksum
A PESEL can have the expected length yet contain an impossible date or a wrong check digit. Check those conditions separately. Here is how to read the local validator’s result without treating it as identity or PESEL-reservation verification.
Prepare one eleven-digit string
Enter the PESEL without a name, address or document scan. Preserve leading zeros: the form uses text, not a numeric value. Spaces and ordinary hyphens are ignored, while letters and other characters remain errors. Empty or excessively long entries trigger a form message.
After selecting “Check”, read the length, date and checksum rows. Encoded date and sex marker appear only when every check passes. A dash instead of a date after failure is intentional: the tool avoids displaying an unchecked interpretation.
Month code and century
PESEL month encoding depends on the century; digit ten encodes sex: even for female, odd for male. The table shows how our validator decodes the month. Do not replace that code with the ordinary month before checksum validation.
The tool checks a real calendar date, including month length and leap years. It does not determine age-based benefit eligibility. A future date is not rejected merely for being future; a passing date check means calendar validity only.
| Years | Month offset | February |
|---|---|---|
| 1800–1899 | +80 | 82 |
| 1900–1999 | +0 | 02 |
| 2000–2099 | +20 | 22 |
| 2100–2199 | +40 | 42 |
| 2200–2299 | +60 | 62 |
Source: Gov.pl — PESEL structure.
Worked example: 29 February 2000
Technical example 00222900009 encodes 2000-02-29. Multiplying its first ten digits by 1, 3, 7, 9, 1, 3, 7, 9, 1, 3 gives sum 61. Its check digit is (10 − (61 modulo 10)) modulo 10, which is 9.
The final modulo matters: a sum ending in zero produces check digit 0, not 10. Example 00222900030 has sum 70 and passes that check. Both strings illustrate the algorithm only and may coincide with an issued PESEL.
Source: PESEL regulation, section 7 — checksum, Dz.U. 2015/1984.
A matching checksum can still hide an invalid date
Example 00223000005 has matching check digit 5 but encodes nonexistent 30 February 2000. The validator rejects its date rather than displaying it as a birth date. Changing the last digit does not repair the calendar.
For a real document, compare digit order with the original and clarify discrepancies with its issuer. Do not reconstruct a person’s PESEL yourself from a birth date. In software testing, separate invalid-date cases from invalid-checksum cases so that each test targets a known condition.
| String | Date | Checksum |
|---|---|---|
| 00222900009 | Pass | Pass |
| 00222900000 | Pass | Fail |
| 00223000005 | Fail | Pass |
| 00222900030 | Pass | Pass — digit 0 |
What the result cannot tell you
“Structure passes” comes from local checks, not a PESEL-register response. The tool does not establish issuance, ownership, reservation status or document authenticity. It does not send the entry to a government service.
The decoded date and sex marker describe only the string’s contents. They do not identify a person or establish a right to an account, loan or benefit. If your process requires an official check, use its designated channel rather than this validator’s result.
Protect the identifier after a local check too
The form does not store the number or result in the URL, analytics or persistent storage. “Clear” removes entries and results, and reloading does not restore them. Copy or print is a separate choice: check the destination of files, paper and clipboard content.
For an error report, use a technical example from this guide and describe the steps and expected outcome. Do not send your PESEL, an identity-document scan or another person’s details. For a set of cases, open the test generator and work without customer data.
Frequently asked questions
Why is the date hidden after a failing result?
Date and sex marker appear only after length, calendar and checksum checks pass. A dash after failure prevents a partial interpretation from appearing verified.
Does the result show PESEL reservation status?
No. The validator does not connect to registers. A passing technical result does not establish reservation, issuance or ownership and does not replace the verification required by your process.
Can a PESEL starting with zero pass?
Yes, if every check passes. Preserve all eleven characters as text. Losing a leading zero during spreadsheet import or numeric-field conversion changes the string being checked.
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.
Tools covered by this guide
Polish NIP validator
Check NIP structure and checksum locally, without verifying issuance or ownership.
Polish PESEL validator
Check PESEL structure and checksum locally, without verifying issuance or ownership.
Test PESEL generator
Create 1–20 test PESEL strings with passing or deliberately failing checksums.