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.
Najnowsze komentarze