Skip to main content
Polskie identyfikatory · 8 min czytania

Generator PESEL

Dane testowe PESEL z poprawną sumą kontrolną. Wskaż datę urodzenia i płeć lub generuj losowo. 1, 5, 10 lub 100 numerów naraz. Każdy przechodzi walidację 1-3-7-9.

Autor: Matt Rybin
Opublikowano Zaktualizowano
Data

Specyfikacja formatu PESEL

Format: RRMMDDSSSGK, 11 cyfr.

Pozycja Pole Opis
1–2 RR Ostatnie dwie cyfry roku urodzenia
3–4 MM Miesiąc urodzenia (z przesunięciem stulecia, patrz niżej)
5–6 DD Dzień urodzenia
7–9 SSS Numer porządkowy (sekwencyjny w ramach tej samej daty)
10 G Cyfra płci: nieparzysta (1,3,5,7,9) = mężczyzna, parzysta (0,2,4,6,8) = kobieta
11 K Cyfra kontrolna (suma kontrolna mod-10 z wagami)

Numer porządkowy + cyfra płci dają do 5 000 przypisań na płeć dziennie. Numery nie są nigdy ponownie przydzielane 1.

Pełny przewodnik po PESEL (jak go uzyskać, gdzie znaleźć, czym się różni od NIP/REGON) znajdziesz w naszym Walidatorze PESEL.

Kodowanie stulecia

Miesiąc w PESEL pełni podwójną funkcję, wskazując miesiąc kalendarzowy i stulecie urodzenia:

Stulecie Przesunięcie Zakres kodów Przykład: marzec
1800–1899 +80 81–92 83
1900–1999 +0 01–12 03
2000–2099 +20 21–32 23
2100–2199 +40 41–52 43
2200–2299 +60 61–72 63

Generowanie: weź miesiąc kalendarzowy, dodaj przesunięcie dla danego stulecia, wpisz wynik na pozycje 3–4. Generator robi to automatycznie dla wszystkich pięciu zakresów.

Dekodowanie: sprawdź, w którym zakresie mieści się kod miesiąca, odejmij przesunięcie — masz miesiąc i stulecie.

W praktyce spotykasz tylko zakresy 1900 (01–12) i 2000 (21–32).

Algorytm sumy kontrolnej

Wagi: 1, 3, 7, 9, 1, 3, 7, 9, 1, 3. Algorytm:

  1. Pomnóż każdą z pierwszych 10 cyfr przez odpowiadającą wagę.
  2. Zsumuj iloczyny.
  3. Weź resztę z dzielenia przez 10.
  4. Odejmij od 10.
  5. Weź resztę z dzielenia przez 10. To jest cyfra kontrolna.

Przykład: 02070803628

Cyfry: 0 2 0 7 0 8 0 3 6 2
Wagi: 1 3 7 9 1 3 7 9 1 3
0 6 0 63 0 24 0 27 6 6
Suma: 132
132 mod 10 = 2
10 - 2 = 8
8 mod 10 = 8 ✓

Cyfra kontrolna = 8, zgadza się z jedenastą cyfrą. PESEL poprawny. Każdy numer wygenerowany przez to narzędzie ma obliczoną cyfrę kontrolną.

JavaScript

function peselCheckDigit(digits) {
const weights = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3];
const sum = digits
.slice(0, 10)
.reduce((acc, d, i) => acc + d * weights[i], 0);
return (10 - (sum % 10)) % 10;
}
function isValidPesel(pesel) {
if (!/^\d{11}$/.test(pesel)) return false;
const digits = [...pesel].map(Number);
return digits[10] === peselCheckDigit(digits);
}

Python

def pesel_check_digit(digits: list[int]) -> int:
weights = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3]
total = sum(d * w for d, w in zip(digits[:10], weights))
return (10 - total % 10) % 10
def is_valid_pesel(pesel: str) -> bool:
if not pesel.isdigit() or len(pesel) != 11:
return False
digits = [int(d) for d in pesel]
return digits[10] == pesel_check_digit(digits)

PHP

function isValidPesel(string $pesel): bool {
if (!preg_match('/^\d{11}$/', $pesel)) return false;
$weights = [1, 3, 7, 9, 1, 3, 7, 9, 1, 3];
$digits = array_map('intval', str_split($pesel));
$sum = 0;
for ($i = 0; $i < 10; $i++) {
$sum += $digits[$i] * $weights[$i];
}
$check = (10 - ($sum % 10)) % 10;
return $digits[10] === $check;
}

Wyrażenia regularne (regex)

Walidacja formatu (11 cyfr):

^\d{11}$

Dopasowuje dowolny ciąg 11 cyfr. Nie sprawdza sumy kontrolnej ani poprawności daty.

Walidacja struktury (poprawne zakresy miesięcy i dni):

^[0-9]{2}(0[1-9]|1[0-2]|2[1-9]|3[0-2]|4[1-9]|5[0-2]|6[1-9]|7[0-2]|8[1-9]|9[0-2])(0[1-9]|[12]\d|3[01])\d{5}$

Weryfikuje, czy cyfry 3–4 to poprawny kod miesiąca (z dowolnego zakresu stulecia), a cyfry 5–6 to dzień w zakresie 01–31. Nie sprawdza sumy kontrolnej ani kalendarzowej poprawności dat (np. 31 lutego przejdzie).

Dlaczego sam regex nie wystarczy: PESEL 99023112345 przechodzi oba wzorce: miesiąc 02 jest poprawny, dzień 31 mieści się w zakresie. Ale 31 lutego nie istnieje. A żaden regex nie weryfikuje cyfry kontrolnej. Zawsze waliduj programowo (algorytm powyżej).

Edge case’y do testowania

Jeśli budujesz walidację lub przetwarzanie PESEL, te przypadki łamią naiwne implementacje. Użyj generatora powyżej, żeby wyprodukować numery pasujące do każdego scenariusza.

Urodzenia po 2000 roku. Kody miesięcy 21–32 psują parsery zakładające, że miesiąc to zawsze 01–12. PESEL zaczynający się od 052706 to 6 lipca 2005, a nie czerwiec z błędnym miesiącem. Parser musi odjąć przesunięcie stulecia przed interpretacją miesiąca.

29 lutego. Poprawny w latach przestępnych, niepoprawny w pozostałych. 000229xxxxx jest poprawny (2000 był rokiem przestępnym), ale 010229xxxxx nie (2001 nie był). Walidator powinien sprawdzać faktyczny kalendarz, nie tylko zakres.

Granice stuleci. 000121xxxxx = 21 stycznia 1900 (kod miesiąca 01, zakres 1900). 002121xxxxx = 21 stycznia 2000 (kod miesiąca 21, zakres 2000). Te same cyfry roku — różne stulecia. Testuj oba.

Cyfra płci = 0. Cyfra 10 = 0 oznacza kobietę (0 jest parzyste). Niektóre implementacje błędnie traktują 0 jako „brak wartości”. Zero jest poprawną cyfrą parzystą.

Cyfra kontrolna = 0. Gdy reszta z dzielenia wynosi 0, cyfra kontrolna to 0 (nie 10). (10 - 0) % 10 = 0. Testuj tę granicę.

Granice dni. Dzień 01 i 31 (tam gdzie dozwolony) to edge case’y. Miesiące z 28, 29 lub 30 dniami nie powinny akceptować dnia 31. Kwiecień, czerwiec, wrzesień i listopad mają maksymalnie 30 dni.

Generatory danych testowych Poland.gg

Potrzebujesz więcej niż samych PESELi? Poland.gg ma generatory wszystkich polskich numerów identyfikacyjnych, każdy z poprawną sumą kontrolną:

Numer Generator Walidator
PESEL (11 cyfr) Ta strona Sprawdź PESEL
NIP (10 cyfr) Generator NIP Weryfikator NIP
REGON (9 lub 14 cyfr) Generator REGON Walidator REGON
Nr dowodu osobistego (9 znaków) Generator nr dowodu
IBAN (26 cyfr) Generator IBAN Sprawdź IBAN
Mikrorachunek (26 cyfr) Generator mikrorachunku Sprawdź mikrorachunek

Wszystkie narzędzia działają w przeglądarce, bez rejestracji, bez przesyłania danych na serwer.

Często zadawane pytania

Czy to są prawdziwe numery PESEL?

Nie. Numery są strukturalnie poprawne — mają prawidłową sumę kontrolną, poprawne kodowanie daty i właściwą cyfrę płci — ale nie są przypisane do rzeczywistych osób. Są generowane losowo i bezpieczne do użycia w środowiskach testowych.

Czy mogę użyć wygenerowanych PESELi w systemie produkcyjnym?

Nie. Używaj wygenerowanych numerów tylko w środowiskach deweloperskich, testowych, stagingowych i demo. Wygenerowany PESEL może przypadkowo pokryć się z numerem prawdziwej osoby. Prawo polskie traktuje PESEL jako dane osobowe w rozumieniu RODO. Jeśli potrzebujesz danych testowych w środowisku zbliżonym do produkcyjnego, generuj numery ze stuleci 1800 lub 2200, gdzie ryzyko kolizji z żyjącą osobą jest znikome.

Jak generator zapewnia poprawność sumy kontrolnej?

Generator konstruuje pierwsze 10 cyfr na podstawie daty i płci (lub wartości losowych), a następnie oblicza jedenastą cyfrę standardowym algorytmem wag 1-3-7-9. Cyfra kontrolna jest zawsze obliczona, nigdy losowa.

Ile poprawnych PESELi istnieje dla jednej daty?

Każda data urodzenia obsługuje 5 000 męskich i 5 000 żeńskich PESELi (cyfry porządkowe 000–999 połączone z 10 możliwymi cyframi płci na numer porządkowy, podzielone na płeć). Dla jednej daty i płci istnieje dokładnie 5 000 poprawnych numerów.

Czy mogę wygenerować PESEL na konkretną datę urodzenia?

Tak. Przełącz tryb na „Konkretna data" w panelu powyżej, wybierz datę i płeć. Generator automatycznie zastosuje poprawne kodowanie stulecia i obliczy sumę kontrolną. Przydaje się, gdy masz testową osobę z konkretną datą urodzenia i potrzebujesz pasującego numeru PESEL.

Szukam walidatora, nie generatora.

Użyj naszego Walidatora PESEL. Odczyta datę urodzenia, płeć i zweryfikuje sumę kontrolną. Strona zawiera pełny przewodnik po formacie PESEL, kodowaniu stulecia i blokadzie numeru.

Bibliografia

  1. Ustawa o ewidencji ludności (tekst jednolity Dz.U. 2024 poz. 736) - isap.sejm.gov.pl

Matt Rybin

Hej!

Jestem Matt Rybin

Ciężko pracuję nad budowaniem najlepszego portalu statystycznego w Polsce. Jeśli wiesz, jak mogę ulepszyć Poland.gg, napisz do mnie!

MATT RYBIN MATTRYBIN

NIP: 6793260169 · REGON: 524468418

ul. Kalwaryjska 69/9, 30-504 Kraków, Polska

Newsletter Poland.gg

Zrozumieć Polskę

Przekopuję się przez polskie bazy prawne i statystyki rządowe, żebyś nie musiał. Dogłębne analizy nieruchomości, poradniki podatkowe, darmowe narzędzia i historie ukryte w urzędowych danych.

// maks. 1 e-mail/tydz.

Prezentowani na dane.gov.pl, oficjalnym portalu otwartych danych RP (wpis nr 1322).

© 2026 Poland.gg