Evo i mog doprinosa temi...
Funkcija sa praktikuma je planirana da radi samo do 2000 te godine a takodje ne proverava ispravno prestupne godine...
Kod za proveru JMBG i prestupne godine omogucava da se proveri ispravnost unetog broja kao i da se dobiju povratne
informacije o datumu rodjenja odnosno poreklu osobe.
Code:
Option Explicit
Public Enum JMBGTip
jCheckErr = 0
jDescript = 1
End Enum
Public Function JMBG(c As String, Tip As JMBGTip) As Variant
' Return code
' 0 - ok
' 1 - Nisu uneti svi brojevi
' 2 - Ima unetih karaktera koji nisu brojke
' 3 - Dan
' 4 - Mesec
' 5 - Godina
' 6 - Lokacija
' 7 - Kontrolni
Dim err As Byte
Dim Dan As Integer
Dim Mesec As Integer
Dim Godina As Integer
Dim Lokacija As Integer
Dim Pol As Integer
Dim Beba As Integer
Dim Kontrolni As Integer
Dim Lok(0 To 95) As String
Dim ErrMsg(1 To 7) As String
Dim i As Integer
ErrMsg(1) = "JMBG mora imati 13 cifara!"
ErrMsg(2) = "JMBG se sastoji samo od brojki!"
ErrMsg(3) = "Neispravno unet DAN rodjenja (prve dve cifre)"
ErrMsg(4) = "Nesipravno unet MESEC rodjenja (treca i cetvrta cifra)"
ErrMsg(5) = "Nesipravno uneta GODINA rodjenja (peta, sesta i sedma cifra)"
ErrMsg(6) = "Nesipravno uneta LOKACIJA rodjenja (osma i deveta cifra)"
ErrMsg(7) = "Nesipravno unet JMBG"
Lok(0) = "Naturalizovani stranci"
Lok(1) = "Naturalizovani stranci BIH"
Lok(2) = "Naturalizovani stranci Crna Gora"
Lok(3) = "Naturalizovani stranci Hrvatska"
Lok(4) = "Naturalizovani stranci Makedonija"
Lok(5) = "Naturalizovani stranci Slovenija"
Lok(6) = "Naturalizovani stranci Srbija"
Lok(7) = "Naturalizovani stranci Vojvodina"
Lok(8) = "Naturalizovani stranci Kosovo"
Lok(9) = "Naturalizovani stranci"
Lok(10) = "Banja Luka"
Lok(11) = "Bihać"
Lok(12) = "Doboj"
Lok(13) = "Goražde"
Lok(14) = "Livno"
Lok(15) = "Mostar"
Lok(16) = "Prijedor"
Lok(17) = "Sarajevo"
Lok(18) = "Tuzla"
Lok(19) = "Zenica"
Lok(21) = "Podgorica"
Lok(23) = "Budva"
Lok(26) = "Nikšić"
Lok(30) = "Osijek, Slavonija"
Lok(31) = "Bjelovar, Podravina"
Lok(32) = "Varaždin, Međimurje region"
Lok(33) = "Zagreb"
Lok(34) = "Karlovac, Kordun"
Lok(35) = "Gospić, Lika"
Lok(36) = "Rijeka, Pula, Gorski kotar"
Lok(37) = "Sisak, Banovina"
Lok(38) = "Split, Zadar, Šibenik, Dubrovnik, Dalmacija"
Lok(39) = "Hrvatsko Zagorje"
Lok(41) = "Bitola"
Lok(42) = "Kumanovo"
Lok(43) = "Ohrid"
Lok(44) = "Prilep"
Lok(45) = "Skopje"
Lok(46) = "Strumica"
Lok(47) = "Tetovo"
Lok(48) = "Veles"
Lok(49) = "Štip"
Lok(50) = "Slovenia"
Lok(71) = "Beograd"
Lok(72) = "Šumadija"
Lok(73) = "Niš"
Lok(74) = "Lekovac, Vranje"
Lok(75) = "Zaječar, Bor"
Lok(76) = "Smederevo"
Lok(77) = "Šabac, Valjevo"
Lok(78) = "Kraljevo, Čačak"
Lok(79) = "Užice"
Lok(80) = "Novi Sad"
Lok(81) = "Sombor"
Lok(82) = "Subotica"
Lok(85) = "Zrenjanin"
Lok(86) = "Pančevo"
Lok(87) = "Kikinda"
Lok(88) = "Ruma"
Lok(89) = "Sremska Mitrovica, Inđija"
Lok(91) = "Priština"
Lok(92) = "K. Mitrovica"
Lok(93) = "Peć"
Lok(94) = "Đakovic"
Lok(95) = "Prizren"
Dan = Left(c, 2)
Mesec = Mid(c, 3, 2)
Godina = Mid(c, 5, 3)
Godina = Godina + IIf(Godina < 100, 2000, 1000)
Lokacija = Mid(c, 8, 2)
Beba = Mid(c, 10, 3)
Pol = IIf(Beba < 500, 0, 1)
err = 0
If Len(c) <> 13 Then
err = 1
ElseIf Not (c Like "#############") Then err = 2
ElseIf Dan < 1 Or Dan > 31 Then err = 3
ElseIf Mesec < 1 Or Mesec > 12 Then err = 4
ElseIf Godina < 1900 Or Godina > Year(Now) Then err = 5
End If
Select Case Mesec
Case 1, 3, 5, 7, 8, 10, 12
If Dan > 31 Then err = 3
Case 4, 6, 9, 11
If Dan > 30 Then err = 3
Case 2
If (Prestupna(Godina) And Dan > 29) Or (Not Prestupna(Godina) And Dan > 28) Then err = 3
End Select
If err = 0 Then
If Lokacija > 95 Then
err = 6
ElseIf Lok(Lokacija) = "" Then err = 6
End If
End If
If err = 0 Then
Kontrolni = 11 - (( _
7 * (Val(Mid(c, 1, 1) + Val(Mid(c, 7, 1)))) + _
6 * (Val(Mid(c, 2, 1) + Val(Mid(c, 8, 1)))) + _
5 * (Val(Mid(c, 3, 1) + Val(Mid(c, 9, 1)))) + _
4 * (Val(Mid(c, 4, 1) + Val(Mid(c, 10, 1)))) + _
3 * (Val(Mid(c, 5, 1) + Val(Mid(c, 11, 1)))) + _
2 * (Val(Mid(c, 6, 1) + Val(Mid(c, 12, 1))))) Mod 11)
If Kontrolni = 11 Then Kontrolni = 0
If Kontrolni = 10 Then err = 7
If err = 0 And Val(Right(c, 1)) <> Kontrolni Then err = 7
End If
If err = 0 Then
JMBG = IIf(Tip = jCheckErr, True, _
Format(Dan, "00") & "." & Format(Mesec, "00") & "." & Format(Godina, "0000") & ". " & _
IIf(Pol = 0, "Muško, ", "Žensko, ") & Lok(Lokacija) & ", " & IIf(Beba > 500, Beba - 500, Beba) & ". beba u danu")
Else
JMBG = IIf(Tip = jCheckErr, err, ErrMsg(err))
End If
End Function
Public Function Prestupna(Godina As Integer) As Boolean
Prestupna = (Prestupna Mod 4 = 0) And ((Godina Mod 400 = 0) Or (Godina Mod 100 <> 0))
End Function
U prilogu je i primer koji opisuje kako se koristi pomenuta funkcija JMBG.
Pozdrav