Skip to content
Simple Tools

Practical guide

How to generate test PESEL values without real people’s data

You do not need a customer’s, employee’s or family member’s identifier to test a PESEL field. Choose a synthetic date and check controlled form cases. The generator creates neither a person nor an official number, and coincidence with an issued PESEL is possible.

Simple Tools editorial teamReviewed: 1 October 2026

Use an environment without customer data

Before starting, disconnect the test application from real accounts, payments, invoicing and government services. Do not pair a generated PESEL with a real name, address or customer history. Do not look a test number up in a production service.

The form confirmation reminds you of the scope; it does not guarantee anonymity. There is no register lookup or confirmed testing-number pool. A generated string may belong to a real person and must remain an isolated test fixture.

Set a synthetic date and encoded sex marker

Choose an existing date within 1800–2299 and the sex marker to encode in the string. The form does not ask for a name or document details. You can use 29 February 2000 as a calendar test example, not as a person’s record.

The generator encodes the century in the month and sets the sex-marker digit’s parity. The linked validator guide explains when those fields are displayed. Do not treat the synthetic date as a declaration of age or benefit eligibility.

Source: Gov.pl — PESEL structure.

Choose checksum mode and batch size

Confirm isolated use, choose 1–20 values and select passing or intentionally failing mode. Positive mode retains a valid calendar date and checksum. Negative mode changes only the last digit, leaving the encoded date and sex marker unchanged.

Create separate cases for an invalid date, empty field, letters, a lost leading zero and excessive length. Neither generator mode creates nonexistent dates. Separate tests let you identify whether calendar, checksum, length or required-entry handling caused rejection.

Illustrative fixtures for 2000-02-29

All passing examples in the table encode 2000-02-29 and a female marker. They are technical fixtures, not verified people’s identifiers. The weighted sum for 00222900009 is 61, producing last digit 9; its negative pair changes that digit to 0.

The table is a fixed illustration, not a promise about the next click. The interface creates an in-memory random seed on generation, so batches can differ. Check a positive string in the local validator and use its negative pair to test the checksum error message, without sending it to a register.

Isolated-test examples — may coincide with issued PESELs
Passing stringFailing checksumCheck digit
00222900009002229000009
00222900023002229000243
00222900047002229000487

Source: PESEL regulation, section 7 — checksum, Dz.U. 2015/1984.

Preserve leading zeros and the warning

Treat PESEL fixtures as eleven-character strings. Numeric spreadsheet import can drop leading zeros and turn a positive case into a length-error test. Set that expected behaviour deliberately rather than changing fixtures accidentally.

“Copy” includes the test-data label, mode, warning and separate value lines. If you extract digit-only strings into an automated fixture, retain the scope note alongside them. File retention and clipboard security depend on your environment, not the local generator.

Repeatability, reset and test boundaries

Values are distinct within a batch but can repeat between batches. For repeatable tests, retain a labelled fixture in your isolated environment. The generator does not promise global uniqueness and is not intended for secrets or identity creation.

Form data, seed and results are not added to the URL, persistent storage or analytics. “Clear” removes results and resets confirmation; reload does not restore them. Passing a form test does not establish issuance, identity or PESEL reservation and does not replace an official procedure.

Frequently asked questions

Are test values guaranteed to be unassigned?

No. The generator neither queries registers nor uses a confirmed reserved-number pool. A value can coincide with an issued identifier, so a passing checksum does not make it suitable for anything outside an isolated test.

Should I enter a customer’s birth date?

Do not use customer data to prepare these tests. Choose a synthetic date suited to the case, without pairing it with a name, address or a real person’s history.

Does failing mode create an invalid date?

No. The calendar date stays valid and only the last digit changes. Date and length failures require separate cases with separately documented expected outcomes.

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

For isolated form and automated software tests only. The generator does not issue a NIP or PESEL. Values are not guaranteed to be unassigned: they may coincide with identifiers belonging to real people or businesses. Disconnect tests from production, payments, invoicing and government services; do not use customer data.

Tools covered by this guide

Calculator

Polish PESEL validator

Check PESEL structure and checksum locally, without verifying issuance or ownership.

Generator

Test NIP generator

Create 1–20 test NIP strings with passing or deliberately failing checksums.

Generator

Test PESEL generator

Create 1–20 test PESEL strings with passing or deliberately failing checksums.