Numer PESEL i suma kontrolna

Ostatnia cyfra numeru PESEL to suma kontrolna. Dzięki niej można wychwycić, czy osoba wprowadzająca numer PESEL do systemu nie pomyliła się przy jego przepisywaniu. Wystarczy dla pierwszych 10 cyfr numeru PESEL obliczyć sumę kontrolną i jeśli będzie taka sama jak 11 cyfra numeru PESEL to oznacza, że z dużym prawdopodobieństwem numer został poprawnie przepisany.

Aby obliczyć sumę kontrolną należy:

  1. Sprawdzić czy numer PESEL składa się z dokładnie 11 znaków. Do tego celu mozna np. użyć narzędzia poprawność danych, które pozwala na wprowadzenie tekstu o długości dokładnie 11 znaków do komórki.
  2. Pomnożyć cyfry numeru PESEL przez odpowiednie wagi: 1,3 7, 9, 1, 3, 7, 9, 1, 3 i zsumować owe iloczyny.
  3. Obliczyć resztę z dzielenia przez 10 z otrzymanej sumy iloczynów (czyli tak naprawdę patrzymy na ostatnią cyfrę sumy iloczynów)
  4. Nasza suma kontrolna to wynik działania 10 – owa reszta z dzielenia (jeśli wynik wyjdzie 10 to naszą sumą kontrolną jest 0). Czyli najprościej będzie tutaj jeszcze raz wykonać operację matematyczną reszta z dzielenia przez 10.

Oto prosty przykład. Użytkownik rejestrując się w systemie podał następujący numer PESEL:

90122512345
  • Numer PESEL składa się z 11 znaków
  • Mnożymy poszczególne cyfry numeru PESEL przez odpowiednie wagi i sumujemy owe iloczyny:
=9*1 + 0*3 + 1*7 + 2*9 + 2*1 + 5*3 + 1*7 + 2*9 + 3*1 + 4*3 = 91
  • Reszta z dzielenia dla liczby 91 przez 10 to 1.
  • 10-1 = 9

Wniosek: suma kontrolna dla naszego numeru PESEL to 9 a nie 5 – czyli podany przeze mnie PESEL jest zmyślony, albo błędnie przepisany.

Oto formuła w Excelu, która waliduje poprawność numeru PESEL (w formule należy wszystkie A2 zamienić na adres komórki do które wprowadzasz numer PESEL).

=JEŻELI.BŁĄD(JEŻELI(DŁ(A2)<>11;"pesel musi mieć 11 znakow";JEŻELI((MOD(10-MOD(FRAGMENT.TEKSTU(A2;1;1)*1+FRAGMENT.TEKSTU(A2;2;1)*3+FRAGMENT.TEKSTU(A2;3;1)*7+FRAGMENT.TEKSTU(A2;4;1)*9+FRAGMENT.TEKSTU(A2;5;1)*1+FRAGMENT.TEKSTU(A2;6;1)*3+FRAGMENT.TEKSTU(A2;7;1)*7+FRAGMENT.TEKSTU(A2;8;1)*9+FRAGMENT.TEKSTU(A2;9;1)*1+FRAGMENT.TEKSTU(A2;10;1)*3;10);10))*1<>(FRAGMENT.TEKSTU(A2;11;1)*1);"zla suma kontrolna";"ok"));"Podana wartość nie wygląda na prawidłowy numer PESEL")

Możemy również napisać prostą funkcję w języku VBA (funkcja ta podobnie jak powyższa formuła sprawdza tylko 2 warunki: czy PESEL ma 11 znaków oraz czy zgadza suma kontrolna – tak więc przez tę funkcję "przejdą" PESELe dla osób błędną datą urodzenia np. 30 luty jeśli żartowniś poprawnie obliczył sumę kontrolną)

Public Function CzyPoprawnyPESEL(Pesel As String) As Boolean

    Dim wagi As Long, sumaK As Long, Cyfra11 As Long

    Pesel = Trim(Pesel)
    CzyPoprawnyPESEL = True
    If Len(Pesel) <> 11 Then CzyPoprawnyPESEL = False
    
    'Suma kontrolna
    wagi = 1 * Val(Mid(Pesel, 1, 1)) + 3 * Val(Mid(Pesel, 2, 1)) + _
    7 * Val(Mid(Pesel, 3, 1)) + 9 * Val(Mid(Pesel, 4, 1)) + _
    1 * Val(Mid(Pesel, 5, 1)) + 3 * Val(Mid(Pesel, 6, 1)) + _
    7 * Val(Mid(Pesel, 7, 1)) + 9 * Val(Mid(Pesel, 8, 1)) + _
    1 * Val(Mid(Pesel, 9, 1)) + 3 * Val(Mid(Pesel, 10, 1))
    sumaK = wagi Mod 10
    sumaK = 10 - sumaK
    sumaK = sumaK Mod 10
    
    Cyfra11 = Val(Mid(Pesel, 11, 1))
    If Cyfra11 <> sumaK Then CzyPoprawnyPESEL = False
End Function
Jeśli artykuł Ci się podobał, będę wdzięczny gdy go udostępnisz w mediach społecznościowych
Ten wpis został opublikowany w kategorii sztuczki i oznaczony tagami . Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.