Polish Personal Identifier

PESEL

Universal Electronic System for Registration of the Population. 11-digit Polish national ID.

Reference Boundary Browser-checkable specification

Use this page for field meaning, local checksum math, examples, and integration notes. Official identity, registry, account, or tax status still belongs to the owning system.

Local spec Draft specification Reviewed 2026-07-12
Quick Facts

Entity Summary

Jurisdiction
Poland (PL)
Category
Polish Personal Identifier
Format
11 numeric digits
Local signal
Birth date, gender digit, checksum
Overview

What is PESEL?

PESEL (Polish Personal Number)

The PESEL (Polish: Powszechny Elektroniczny System Ewidencji Ludności, Universal Electronic System for Registration of the Population) is the mandatory personal identification number used in Poland.

Introduced in 1979 under the communist government to track citizens, it has evolved into the central backbone of Polish digital administration, tax processing, banking operations, and healthcare services.

Scope and Issuing Authority

Every Polish citizen and permanent resident, as well as temporary residents staying in Poland for more than 30 days, is legally required to hold a PESEL number. The registry is governed and managed by the Ministry of Digital Affairs (Ministerstwo Cyfryzacji) of the Republic of Poland.

The number is assigned upon registration of birth for citizens, or upon application at the local municipal office (Urząd Gminy) for foreign residents.

Visualization

Visual Structure Breakdown

year
YY
month
MM
day
DD
serial
SSSG
checksum
C

The PESEL is always exactly 11 numeric digits long and is structured into five distinct fields:

[ Y Y ] [ M M ] [ D D ] [ S S S G ] [ C ]
FieldsPositionsMeaning
YY1–2Year of birth (last two digits).
MM3–4Month of birth (modified by century offsets).
DD5–6Day of birth.
SSSG7–10Serial number and Gender indicator. The last digit of this serial (digit 10) encodes gender (even = female, odd = male).
C11Checksum control digit.
Verification Math

Modulo Checksum Details

The 11th digit is a checksum calculated using a weighted modulo 10 method defined by standard national registration standards.

Weights

Each of the first 10 digits is multiplied by a corresponding weight multiplier in a repeating pattern:

Digit Position12345678910
Weight1379137913

Calculation Formula

The sum is calculated as:

\[S = \sum_{i=1}^{10} (d_i \times w_i)\]

The control checksum digit \(C\) is then computed as:

\[C = (10 - (S \pmod{10})) \pmod{10}\]

This ensures that if the modulo division yields a remainder of 0, the final checksum matches 0.

Test cases

Validation Examples

Sample Input Description Status
92082612343 Valid Male (1992) — Standard valid PESEL representing a male born on August 26, 1992. ✓ Valid
92082612336 Valid Female (1992) — Standard valid PESEL representing a female born on August 26, 1992. ✓ Valid
92082612340 Invalid Checksum — Fails the weighted modulo 10 checksum verification (calculated checksum is 3, input ends with 0). ✗ Invalid
92023012343 Invalid Calendar Date — Parsed date decodes to February 30th, which is an invalid calendar day. ✗ Invalid
92132612343 Invalid Month — Months field (13) exceeds normal calendar month limit and does not map to any valid century offset. ✗ Invalid
Developers

Implementation Guidance

When integrating PESEL validation in backend systems, developers should follow these rules:

Input Filtering and Regex

Before running checksum verification, validate the basic format constraints:

  • Must consist of exactly 11 digits.
  • Use basic regex to assert numerical integrity: /^\d{11}$/.

Calendar Decoding

Do not decode the birth date assuming a 1900 century baseline. You must parse the month value MM to determine the century offset:

  • Months 01-12: 1900-1999 (Offset +0)
  • Months 21-32: 2000-2099 (Offset +20)
  • Months 41-52: 2100-2199 (Offset +40)
  • Months 61-72: 2200-2299 (Offset +60)
  • Months 81-92: 1800-1899 (Offset +80)

Verify that the decoded year, month, and day form a valid calendar date (accounting for leap years in 2000 vs 1900).

API Language Code Snippets
function validatePESEL(pesel) {
  if (!/^\d{11}$/.test(pesel)) return false;
  const weights = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3];
  let sum = 0;
  for (let i = 0; i < 10; i++) {
    sum += parseInt(pesel[i]) * weights[i];
  }
  const checksum = (10 - (sum % 10)) % 10;
  return checksum === parseInt(pesel[10]);
}
FAQ

Frequently Asked Questions

Can foreign nationals receive a PESEL?

Yes. Foreigners registering their residence for a stay over 30 days are automatically assigned a PESEL. Those who cannot register their residence can submit an application citing a legal basis (e.g. tax reporting, work contract requirements).

Why is the month field offset by 20, 40, 60, or 80?

This offset was designed to resolve century ambiguities. Because the year field YY only supports two digits, adding offsets to the month MM allows the system to distinguish between 1800, 1900, 2000, 2100, and 2200 birth years without changing the 11-digit length.

Can a PESEL number be changed?

A PESEL is generally permanent. It can only be changed under rare legal circumstances, such as:

1. An official correction of the holder's birth date.

2. A legal gender transition (since the 10th digit designates gender).

3. Adoption of a child.

References

Official Registry Sources

1. Ministry of Digital Affairs (Poland): Central administration office governing public registries and PESEL records database. Official portal.

2. Act of 24 September 2010 on Population Registration: The statutory legal base of Poland defining personal identification code schemas and citizen registration requirements.

3. PESEL Registry Specifications (Gov.pl): Documentation for governmental APIs and developer integration paths.