logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak napisać program do sprawdzania numeru PESEL w Visual Basic?

andare 30 Maj 2005 22:41 9270 7
REKLAMA
  • #1 1537339
    andare
    Poziom 11  
    Posty: 19
    Ocena: 4
    witam
    mam duzy problem jak w temacie.
    proszę o pomoc w napisaniu takowego programiku.

    Pzdr
    Jacek
  • REKLAMA
  • #2 1537366
    LordBlick
    VIP Zasłużony dla elektroda
    Posty: 5438
    Pomógł: 549
    Ocena: 69
    Rejestr PESEL – Powszechny Elektroniczny System Ewidencji Ludności prowadzony jest od 1979 roku i zawiera dane osób przebywających stale na terytorium RP, zameldowanych na pobyt stały lub czasowy trwający ponad 2 miesiące a także osób ubiegających się o wydanie dowodu osobistego lub osób, dla których odrębne przepisy przewidują potrzebę posiadania numeru PESEL.
    Numer PESEL jest to 11–cyfrowy, stały symbol numeryczny, jednoznacznie identyfikujący określoną osobę fizyczną.
    Jego postać przedstawia diagram:
    1 2 3 4 5 6 7 8 9 10 11 – numeracja pozycji
    0 2 0 7 0 8 0 3 6 2 8 – PESEL osoby urodzonej 8 lipca 1902 roku, płci żeńskiej ( przykład ).
    • na pozycji 1-2 umieszczone są dwie ostatnie cyfry roku
    urodzenia,
    • na pozycji 3-4 umieszczone są dwie cyfry miesiąca urodzenia
    wraz z zakodowanym stuleciem roku urodzenia :
    » dla osób urodzonych w latach 1900 do 1999 – miesiąc
    zapisywany jest w sposób naturalny (bez zmian)
    » dla odróżnienia osób urodzonych w innych latach niż
    1900 – 1999 do numeru miesiąca dodawane są
    następujące wielkości :
    – 80 dla lat 1800 – 1899
    – 20 dla lat 2000 – 2099
    – 40 dla lat 2100 – 2199
    – 60 dla lat 2200 – 2299
    • na pozycji 5-6 umieszczone są dwie cyfry dnia urodzenia,
    • na pozycji 7-10 umieszczony jest liczba porządkowa z
    oznaczeniem płci (cyfra na pozycji 10 nieparzysta oznacza płeć
    męską, w innym przypadku - płeć żeńską),
    • na pozycji 11 umieszczona jest liczba kontrolna, obliczana
    nastepująco :
    1. każdą pozycję numeru ewidencyjnego mnoży się przez
    odpowiednią wagę: 1-3-7-9-1-3-7-9-1-3;
    2. utworzone iloczyny sumuje się ( przy tradycyjnym obliczaniu
    liczby kontrolnej stosowanie „modulo 10" nie wymaga
    dodawania pełnych iloczynów wchodzących w skład sumy,
    lecz tylko ostatnich jego cyfr, co jest oczywistym ułatwieniem,
    szczególnie przy „wyższych" wagach );
    3. wartość ostatniej otrzymanej liczby należy odjąć od 10
    (dopełnienie 10 ) ; wynik odejmowania stanowi liczbę
    kontrolną danego numeru ewidencyjnego. ( dla wyniku 10
    liczba kontrolna wynosi 0 )
    Informacje podano za stroną internetową Ministerstwa Spraw
    Wewnętrznych i Administracji, Departament Rejestrów
    Państwowych : http://www.mswia.gov.pl/ ,
    na dzień 30 listopada 2004 r.
    ------------
    P.S. Pisałem program w tym temacie, ale w masm32... ;)
    --
    Pozdrawiam, Daniel
    Załączniki:
    • Jak napisać program do sprawdzania numeru PESEL w Visual Basic? PESEL.png (3.87 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #3 1537557
    andare
    Poziom 11  
    Posty: 19
    Ocena: 4
    Daniel , dzieki za tak szybka odpowiedz.
    To wszystko co napisales wiem.
    Sztuka( jak dla mnie) jest zrobic to w visual-u.
    Szczerze mówiąc nie czuje programowania i w tym lezy problem.
    Jezeli jest ktos kto moze pomoc, dziekuje.
    Jeszcze raz Daniel - dzieki

    Pzdr
    Jacek
  • #4 1537599
    kffiatek3005
    Poziom 2  
    Posty: 4
    z tego co pamiętam należy użyć MID i LEN(liczy ilość znaków w polu)
    1. zadeklarowac zmienne
    2. sprawdzenie czy jest 11 znaków
    3. Obliczenie Sumy kontrolnej i liczby kontrolnej
    4 wiadomosć o poprawności peselu

    SUMA KONTROLNA:
    zakladamy że jedna liczba to P:
    P1*1 + P2*3 + P3*7 + P4*9 + P5*1 + P6*3 + P7*7 + P8*9 + P9*1 + P10*3

    LiczbaKontrolna= 10-(SK MOD 10) (to pamiętam z access'a i nie wiem czy w visualu tez tak sie wpisuje)


    I na koniec użyć zmiennej IF
  • REKLAMA
  • Pomocny post
    #5 1538868
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Moze na poczatek tak dla zachety :)


    Dim Pesel As String
    
    Private Sub Form_Load()
    Dim Rocznik As Byte
    Dim Miesiac As Byte
    
    'Pobranie pesel
    Pesel = InputBox("wpisz pesel", , "02070803628")
    
    'kiedy nie jest pusto
    If Pesel <> "" Then
    
    'Wyliczenie rocznika
    Miesiac = Mid(Pesel, 3, 2)
    If Miesiac > 80 Then
    Rocznik = 18
    Miesiac = Miesiac - 80
    ElseIf Miesiac > 60 Then
    Rocznik = 22
    Miesiac = Miesiac - 60
    ElseIf Miesiac > 40 Then
    Rocznik = 21
    Miesiac = Miesiac - 40
    ElseIf Miesiac > 20 Then
    Rocznik = 20
    Miesiac = Miesiac - 20
    Else
    Rocznik = 19
    End If
    
    'Wyswietlenie
    MsgBox "Rok: " & Rocznik & Left(Pesel, 2)
    MsgBox "Dzien: " & Mid(Pesel, 5, 2)
    MsgBox "Miesiac: " & Miesiac
    End If
    
    End
    
    End Sub


    Napewno sobie to rozbudujesz.
    A napewno nie zapomnij o obsludze bledow jak ktos wpisze glupoty :)
    Tu jedyna obsluga bledu jest to by okno nie bylo puste.

    pozdro
  • REKLAMA
  • #6 1539876
    andare
    Poziom 11  
    Posty: 19
    Ocena: 4
    witam i dziekuje za pomoc,
    sivex to dla zachęty - juz jestem chętny :) prosimy o jeszcze
    tak na poważnie dziekuje bardzo

    Pzdr
    Jacek
  • #7 1541726
    Akane
    Poziom 27  
    Posty: 638
    Pomógł: 144
    Ocena: 33
    hihi widzę że temat cieszy się zainteresowaniem :)
    wyskrobałem takie coś w basicu (ibpro)
    pesel = "02070803628"
    
    INT male, year, month, day, evid, ok
    ok = TestPesel(pesel, male, year, month, day, evid)
    
    print "pesel:",pesel
    print "data: ",year,".",month,".",day
    print "evid: ",evid
    if male then print "mezczyzna" else print "kobieta"
    print "ok : ",ok
    getch()
    
    
    sub TestPesel(pesel:STRING, male:INT byref, year:INT byref, month:INT byref, day:INT byref, evid:INT byref),INT
    	INT xrok, ctrl, a
    	CHAR div[10]
    
    	year  = val(left$(pesel,2))
    	month = val(mid$(pesel, 3, 2))
    	day   = val(mid$(pesel, 5, 2))
    	evid  = val(mid$(pesel, 7, 4))
    	male  = (evid&1)
    	xrok  = val(mid$(pesel, 3, 2))
    
    	if (xrok>=0) and (xrok <=12)
    		year+=1900
    	endif
    
    	if (xrok>=80) and (xrok <=12+80)
    		year+=1800
    		month-=80
    	endif
    
    	if (xrok>=20) and (xrok <=12+20)
    		year+=2000
    		month-=20
    	endif
    
    	if (xrok>=60) and (xrok <=12+60)
    		year+=2200
    		month-=60
    	endif
    
    
    	div = 1,3,7,9,1,3,7,9,1,3
    
    	ctrl = 0
    	for a = 0 to 9
    		ctrl += ((pesel[a]-48) * div[a])
    	next a
    
    	ctrl = ctrl%10
    	if ctrl=0 then ctrl=10
    	ctrl = 10-ctrl
    
    	return (ctrl = pesel[10]-48)
    endsub
  • #8 1976598
    andare
    Poziom 11  
    Posty: 19
    Ocena: 4
    Private Sub CommandButton1_Click()
    Dim a, b, c, d, e, f, g, h, i, j, k, suma, reszta, kontrol As Integer
    Dim a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, suma1, kontrol1 As Integer
    Dim pesel, nip, plec, plec1, plec2 As String
    Dim m, r, rok As Integer
    
    pesel = TextPESEL.Text
    
    
    a = CInt(Left(pesel, 1))
    b = CInt(Mid(pesel, 2, 1))
    c = CInt(Mid(pesel, 3, 1))
    d = CInt(Mid(pesel, 4, 1))
    e = CInt(Mid(pesel, 5, 1))
    f = CInt(Mid(pesel, 6, 1))
    g = CInt(Mid(pesel, 7, 1))
    h = CInt(Mid(pesel, 8, 1))
    i = CInt(Mid(pesel, 9, 1))
    j = CInt(Mid(pesel, 10, 1))
    k = CInt(Right(pesel, 1))
    
    plec = CInt(Mid(pesel, 10, 1))
    plec1 = plec Mod 2
    If plec1 = 1 Then
    plec2 = "mezczyzna"
    Else: plec2 = "kobieta"
    End If
    
    suma = a * 1 + b * 3 + c * 7 + d * 9 + e * 1 + f * 3 + g * 7 + h * 9 + i * 1 + j * 3
    reszta = suma Mod 10
    kontrol = (10 - reszta) Mod 10
    
    If k = kontrol Then
    Label2 = "prawidlowy PESEL"
    
      dz = CInt(Mid(pesel, 5, 2))
      rok = CInt(Left(pesel, 2))
      m = CInt(Mid(pesel, 3, 2))
      If m <= 12 Then
       
       r = 1900
       rok1 = r + rok
      ElseIf (m >= 21 And m <= 32) Then
       m = m - 20
       r = 2000 + m
       rok1 = r + rok
      ElseIf (m >= 41 And m <= 52) Then
       m = m - 40
       r = 2100 + m
       rok1 = r + rok
      ElseIf (m >= 61 And m <= 72) Then
       m = m - 60
       r = 1800 + m
       rok1 = r + rok
      End If
      
      
    Label12.Caption = TextBox2.Value
    Label13.Caption = TextBox3.Value
    Label14.Caption = plec2
    Label15.Caption = rok1 & " . " & m & " . " & dz
    Label16.Caption = TextPESEL.Value
    
    
    Else
    Label2 = "nieprawidlowy PESEL"
    End If
    
    End Sub
    
    Private Sub CommandButton2_Click()
    TextBox1 = ""
    TextBox2 = ""
    TextBox3 = ""
    TextBox4 = ""
    TextBox5 = ""
    TextPESEL = ""
    TextBox7 = ""
    Label2 = ""
    Label11 = ""
    Label12 = ""
    Label13 = ""
    Label14 = ""
    Label15 = ""
    Label16 = ""
    
    UserForm1.Hide
    End Sub
    
    Private Sub CommandButton3_Click()
    TextBox1 = ""
    TextBox2 = ""
    TextBox3 = ""
    TextBox4 = ""
    TextBox5 = ""
    TextPESEL = ""
    TextBox7 = ""
    Label2 = ""
    Label11 = ""
    Label12 = ""
    Label13 = ""
    Label14 = ""
    Label15 = ""
    Label16 = ""
    
    End Sub
    
    
    Private Sub Label11_Click()
    
    End Sub
    
    Private Sub Label12_Click()
    
    End Sub
    
    Private Sub TextBox2_Change()
    
    End Sub
    
    Private Sub TextPESEL_Change()
    
    End Sub
    
    Private Sub UserForm_Click()
    
    End Sub



    Witam
    dziekuję wszystkim za pomoc
    i wklejam to co razem ze znajomym "wymęczyliśmy".
    Ćwiczenie zaliczone ,więc uważam temat za zakończony.
    Pzdr
    Jacek

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy stworzenia programu w Visual Basic do weryfikacji numeru PESEL. Numer PESEL to 11-cyfrowy identyfikator osoby, zawierający zakodowaną datę urodzenia, płeć oraz sumę kontrolną. Wskazano, że program powinien sprawdzać długość ciągu znaków, wyodrębniać poszczególne cyfry za pomocą funkcji MID i LEN, a następnie obliczać sumę kontrolną według wzoru: suma ważona cyfr PESEL z wagami 1, 3, 7, 9, 1, 3, 7, 9, 1, 3. Liczba kontrolna to 10 minus reszta z dzielenia sumy przez 10. Przykładowy kod w Visual Basic pokazuje, jak wyodrębnić rok, miesiąc i dzień urodzenia, uwzględniając przesunięcia miesięcy dla różnych stuleci, oraz jak określić płeć na podstawie przedostatniej cyfry PESEL. Podkreślono konieczność obsługi błędów przy niepoprawnym formacie danych. Dodatkowo zaprezentowano fragmenty kodu w innych dialektach Basic, które realizują podobną funkcjonalność. Całość ma na celu pomoc osobom mniej doświadczonym w programowaniu w Visual Basic w implementacji walidacji numeru PESEL.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA