Ostatnio pisałem o możliwości tworzenia własnych funkcji. Dzisiaj chciałbym pokazać jak można praktycznie wykorzystać taką wiedzę.

Nie wiem czy zdajecie sobie sprawę, ale każdy numer PESEL jest zakodowanym symbolem jednoznacznie identyfikującym określoną osobę i można wg wzoru sprawdzić jego poprawność.

Na wstępie stwórzmy sobie funkcję, która będzie przyjmowała numer PESEL i sprawdźmy, czy posiada on 11 znaków:

Function SprawdzPESEL(pesel as String) As Boolean
  If Len(pesel) = 11 Then
    sprawdzPESEL = True
  Else
    sprawdzPESEL = False
  End If
End Function

Kolejnym krokiem, jeśli mamy 11 znaków jest oddzielenie każdego z osobna. Wykorzystamy więc funkcję wbudowaną Mid, która wycina nam fragmenty z napisu:

z1 = Mid(pesel,1,1)
z2 = Mid(pesel,2,1)
z3 = Mid(pesel,3,1)
…
z10 = Mid(pesel,10,1)
z11 = Mid(pesel,11,1)

Teraz znaki od 1 do 10 mnożymy odpowiedni razy 1, 3, 7, 9, 1, 3, 7, 9, 1 i 3

z1 = Mid(pesel,1,1) * 1
z2 = Mid(pesel,2,1) * 3
z3 = Mid(pesel,3,1) * 7
…
z10 = Mid(pesel,10,1) * 3
z11 = Mid(pesel,11,1)

Teraz sumujemy wszystkie liczby otrzymane z mnożenia znaków od 1 do 10. Wyciągamy resztę z dzielenia przez 10, a na koniec od 10 odejmujemy uzyskaną liczbę. Trzeba pamiętać, że jeśli otrzymamy po tych operacjach 10, należy wziąć pod uwagę 0.

suma = z1 + z2 + z3 + z4 + z5 + z6 + z7 + z8 + z9 + z10
reszta = suma Mod 10
wynik = 10 - reszta
If wynik = 10 Then
wynik = 0
End If

Ostatnim krokiem jest sprawdzenie, czy wynik jest równy cyfrze kontrolnej, czyli tej, która znajduje się w z11. Tutaj jedna, bardzo ważna uwaga: funkcja Mid zwraca nam zmienną typu String, natomiast zmienna wynik będzie typu Integer, ponieważ jest wynikiem działań matematycznych na liczbach całkowitych. Musimy zatem zamienić typ jednej z nich, aby obie miały ten sam.

cyfraKontrolna = Int(z11)

Teraz można porównać ze sobą wyniki i sprawdzić, czy PESEL jest poprawny:

If wynik = cyfraKontrolna Then
sprawdzPESEL = True
Else
sprawdzPESEL = False
End If

Całą funkcję z przykładowymi numerami PESEL znajdziecie w pliku dołączonym do wpisu. 

Dołącz do newslettera już dziś!
Zero spamu - tylko wartościowe treści!
Musisz już lecieć?
Zostaw swój adres e-mail i dołącz do BEZPŁATNYCH WEBINARÓW dotyczących SQLa!
  • „Jak uczyć się SQLa?” – 4 października
  • „SQL dla testerów” – 12 października