Sprawdzamy poprawność numeru PESEL

PESEL to Powszechny Elektroniczny System Ewidencji Ludności. Za pomocą sumy kontrolnej możemy sprawdzić czy numer PESEL jest poprawny. Budowa numeru PESEL jest następująca: 1-2 cyfra - ostatnie dwie cyfry roku urodzenia, 3-4 cyfra - dwie cyfry miesiąca urodzenia, 5-6 cyfra - dwie cyfry dnia urodzenia, 7-10 cyfra - liczba porządkowa z oznaczeniem płci (parzysta - kobieta, nieparzysta - mężczyzna), 11 cyfra - suma kontrolna. Sam algorytm sprawdzania sumy kontrolnej polega na obliczeniu sumy przemnożonych cyfr z numeru PESEL (od 1 do 10) przez odpowiednie wagi (1,3,7,9,1,3,7,9,1,3). Wynik jest dzielony modulo 10, odejmowany od 10 i jeszcze raz dzielony modulo 10. Cyfra którą dostaniemy powinna być zgodna z 11 cyfrą numeru PESEL.
// wykorzystujemy klasę Scanner z pakietu java.util
import java.util.*;

/**
 * Sprawdzenie sumy kontrolnej w numerze PESEL
 * @author kodatnik.blogspot.com 
 */ 
public class Pesel {
 
 // metoda sprawdza poprawność numeru PESEL na podstawie sumy kontrolnej
 // zwraca true dla poprawnych i false dla niepoprawnych numerów
 public static boolean sprawdz(String pesel){
  // zakładamy tablicę z wagami
  int[] wagi = {1, 3, 7, 9, 1, 3, 7 ,9 ,1 ,3};

  // sprawdzamy długość PESEL'a, jeśli nie jest to 11 zwracamy false
  if (pesel.length() != 11) return false;
  
  // zakładamy zmienną będącą sumą kontrolną
  int suma = 0;
  
  // liczymy w pętli sumę kontrolną przemnażając odpowiednie
  // cyfry z PESEL'a przez odpowiednie wagi
  for (int i = 0; i < 10; i++)
     suma += Integer.parseInt(pesel.substring(i, i+1)) * wagi[i];
  
  // pobieramy do zmiennej cyfraKontrolna wartość ostatniej cyfry z PESEL'a   
  int cyfraKontrolna = Integer.parseInt(pesel.substring(10, 11));

  // obliczamy cyfrę kontrolną z sumy (najpierw modulo 10 potem odejmujemy 10 i jeszcze raz modulo 10)
  suma %= 10;
  suma = 10 - suma;
  suma %= 10;
  
  // zwracamy wartość logiczną porównania obliczonej i pobranej cyfry kontrolnej
  return (suma == cyfraKontrolna);
  
 }
 
 public static void main(String[] args){
  
  Scanner sc = new Scanner(System.in);
  System.out.print ("Podaj numer PESEL: " );
  
  // pobieramy od użytkownika PESEL
  String pesel = sc.nextLine();
  
  // wyświetlamy na ekranie informacje o poprawności sumy kontrolnej PESEL
  System.out.println("Twój PESEL jest " + ((sprawdz(pesel)) ? "poprawny." : "niepoprawny"));

 }
}
Uruchomiona aplikacja:
Podaj numer PESEL: 85032208451
Twój PESEL jest poprawny.
Powyższy algorytm nie sprawdza numeru PESEL pod względem nieprawidłowych danych (niewłaściwe numery miesięcy, dni). Zauważ PESEL: 66666666666 jest traktowany jako poprawny!
Dla określenia różnych lat (wieków) urodzenia dodaje się do numeru miesiąca następujące wartości: lata 1800-1899 - 80, lata 1900-1999 - 0, lata 2000-2099 - 20 itd.


4 Komentarze - Sprawdzamy poprawność numeru PESEL

Anonimowy pisze...

Całkiem spoko rzecz.Pozdro.Michał Paryjczak

Anonimowy pisze...

bardzo mi sie przydalo :-)

auto_joker

Devon pisze...

Ciesze się, że mogłem pomóc :)

wujokrzysio pisze...

Polecam do testowania:
http://generatory.it/

Prześlij komentarz

Możesz użyć niektórych tagów HTML, takich jak <b>, <i>, <u>, <a> Nie spamuj :)

Popularne posty