provera PIB-a objasnjenje

provera PIB-a objasnjenje

offline
  • Pridružio: 26 Jan 2006
  • Poruke: 233

Pokusavam da napravim jedan program gde mi je potrebno proveriti PIB (poreski identifikacioni broj).Na forumu sam nasao funkciju koja vrsi proveru. Medjutim ovaj kod mi nije bas jasan.Moze li mi ko dati blize objasnjenje ovog koda i po kojoj formuli se proveravaju brojevi PIB-a. Nije mi bas jasno kako uklopiti ovu funkciju kod mene.
Procedura bi kod mene bila ovakva korisnik unese PIB u TextBox - txtPIB i kad pritisne dugme na primer cmdProvera izbaci: ako PIB nije ispravan poruku
Vas PIB nje dobar.Ukoliko je PIB ok program nastavlja sa radom
Public Function ProveriPIB(PIB As String) Dim c0 As Integer Dim c1 As Integer Dim c2 As Integer Dim c3 As Integer Dim c4 As Integer Dim c5 As Integer Dim c6 As Integer Dim c7 As Integer Dim c8 As Integer Dim zadnji As String zadnji = Right(PIB, 1) PIB = Left(PIB, 8) If Len(PIB) <> 8 Then    ProveriPIB = 1 Else        c8 = (CInt(Mid(PIB, 1, 1)) + 10) Mod 10        If c8 = 0 Then          c8 = 10        End If        c8 = (c8 * 2) Mod 11        c7 = (CInt(Mid(PIB, 2, 1)) + c8) Mod 10        If c7 = 0 Then          c7 = 10        End If        c7 = (c7 * 2) Mod 11        c6 = (CInt(Mid(PIB, 3, 1)) + c7) Mod 10        If c6 = 0 Then          c6 = 10        End If        c6 = (c6 * 2) Mod 11        c5 = (CInt(Mid(PIB, 4, 1)) + c6) Mod 10        If c5 = 0 Then          c5 = 10        End If        c5 = (c5 * 2) Mod 11        c4 = (CInt(Mid(PIB, 5, 1)) + c5) Mod 10        If c4 = 0 Then          c4 = 10        End If        c4 = (c4 * 2) Mod 11        c3 = (CInt(Mid(PIB, 6, 1)) + c4) Mod 10        If c3 = 0 Then          c3 = 10        End If        c3 = (c3 * 2) Mod 11        c2 = (CInt(Mid(PIB, 7, 1)) + c3) Mod 10        If c2 = 0 Then          c2 = 10        End If        c2 = (c2 * 2) Mod 11        c1 = (CInt(Mid(PIB, 8, 1)) + c2) Mod 10        If c1 = 0 Then          c1 = 10        End If        c1 = (c1 * 2) Mod 11        c0 = (11 - c1) Mod 10        If c0 <> zadnji Then         ProveriPIB = 1        Else         ProveriPIB = 0        End If        'return(pib || to_char(c0));       End If End Function

Hvala

Dopuna: 25 Apr 2007 23:07

U pravilniku o PIB-u sam nasao da prvih osam cifara je redni broj obveznika koji moze biti od 10000001 do 999999999.Moze li mi ko napisati opstu formulu kako se izracunava 9 cifra kontrolni broj.

Ako dobijem ovu formulu nije tesko napisati ni proveru PIB-a.
Ja sam napisao proveru - uslove: ukoliko je PIB kraci ili duzi od 9 cifara, zatim ukoliko je prvih 8 cifara manje od 100000001. Sad mi je potrebna opsta formula kako izracunati kontrolni broj.Kad to imam onda nije tesko napisati i proveru.
Hvala



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 28 Jun 2004
  • Poruke: 990
  • Gde živiš: Kucura

Predpostavljam da je 0 ispravno, a 1 neispravno. Znaci:

If ProveriPIB(Text1.Text) = 1 Then MsgBox "Neispravan PIB" If ProveriPIB(Text1.Text) = 0 Then MsgBox "Ispravan PIB"

Dopuna: 25 Apr 2007 23:38

Ja cu ti napisati bilo koju petlju, samo se ne razumem u ove PIB i kontrolne brojeve Confused



offline
  • Pridružio: 26 Jan 2006
  • Poruke: 233

provalio sam,ustvario nasao na netu kako se racuna kontrolni broj (deveta cifra) PIB-a

offline
  • Strog  Male
  • Stručni saradnik
    Web programiranje
  • Bojan Kopanja
  • Web & Mobile developer @ ZeusSoftware
  • Pridružio: 26 Jul 2003
  • Poruke: 2597
  • Gde živiš: Stara Pazova

Pa valjalo bi da stavis i ovde to resenje posto moze da zatreba jos nekome...

offline
  • Pridružio: 26 Jan 2006
  • Poruke: 233

Ovo je komplet kod za komandno dugme koje proverava PIB.,zajedno sa funkcijom koja proverava kontrolni broj(9-a cifra PIB-a).Nisam siguran da li je ovo ispravno sto sam radio sa GOTO naredbama,ali funkcionise.Ostalo mi je jos da ubacim proveru kad nije nista ubaceno u tekst polje.Moze li mi ko napisati kod za validaciju kad je txtPIB.text prazno.
Pokusavao sam da funkcije IsNull ili IsEmpty ubacim ovako

Private Sub txtPIB_Validate(Cancel As Boolean) If IsEmpty(txtPIB.Text) Then  MsgBox "Vaš PIB je prazan.Unesite ga", vbCritical, "PIB"  End If End Sub ali ovo ne funkcionise.  Hvala '/ komandno dugme Private Sub cmdPIB_Click() Dim provera As Boolean Dim strI As String strI = txtPIB.Text provera = ProveriPIB(strI)  If IsNumeric(txtPIB.Text) = False Then  MsgBox "Niste uneli numerièke karaktere.Unesite PIB Ponovo", vbCritical, "PIB"  GoTo ispravnost  End If     If Len(txtPIB.Text) <> 9 Then  lblIspravnost.ForeColor = &HFF&  lblIspravnost.Caption = "PIB nije ispravan"         MsgBox "Vas PIB nema 9 cifara ili ima više od 9 cifara, upišite novi", vbCritical, "PIB"    GoTo ispravnost    ElseIf provera = False Or Mid(strI, 1, 8) < 10000001 Then     lblIspravnost.ForeColor = &HFF&         lblIspravnost.Caption = "PIB nije ispravan"         MsgBox "Vas PIB nije dobar, upišite novi", vbCritical, "PIB"      End If ispravnost:     If provera = True Then      frmPozivNaBroj.Show      lblIspravnost.ForeColor = &HC000&     lblIspravnost.Caption = "PIB je ispravan"     End If     End Sub ' funkcija koja proverava devetu cifru PIB-a Public Function ProveriPIB(PIB As String) As Boolean Dim c0 As Integer Dim c1 As Integer Dim c2 As Integer Dim c3 As Integer Dim c4 As Integer Dim c5 As Integer Dim c6 As Integer Dim c7 As Integer Dim c8 As Integer Dim zadnji As String  If Len(PIB) = 9 And Mid(strI, 1, 8) >= 10000001 Then zadnji = Right(PIB, 1) PIB = Left(PIB, 8)        c8 = (CInt(Mid(PIB, 1, 1)) + 10) Mod 10        If c8 = 0 Then          c8 = 10        End If        c8 = (c8 * 2) Mod 11        c7 = (CInt(Mid(PIB, 2, 1)) + c8) Mod 10        If c7 = 0 Then          c7 = 10        End If        c7 = (c7 * 2) Mod 11        c6 = (CInt(Mid(PIB, 3, 1)) + c7) Mod 10        If c6 = 0 Then          c6 = 10        End If        c6 = (c6 * 2) Mod 11        c5 = (CInt(Mid(PIB, 4, 1)) + c6) Mod 10        If c5 = 0 Then          c5 = 10        End If        c5 = (c5 * 2) Mod 11        c4 = (CInt(Mid(PIB, 5, 1)) + c5) Mod 10        If c4 = 0 Then          c4 = 10        End If        c4 = (c4 * 2) Mod 11        c3 = (CInt(Mid(PIB, 6, 1)) + c4) Mod 10        If c3 = 0 Then          c3 = 10        End If        c3 = (c3 * 2) Mod 11        c2 = (CInt(Mid(PIB, 7, 1)) + c3) Mod 10        If c2 = 0 Then          c2 = 10        End If        c2 = (c2 * 2) Mod 11        c1 = (CInt(Mid(PIB, 8, 1)) + c2) Mod 10        If c1 = 0 Then          c1 = 10        End If        c1 = (c1 * 2) Mod 11        c0 = (11 - c1) Mod 10        If c0 = zadnji Then         ProveriPIB = 1        Else         ProveriPIB = 0        End If        'return(pib || to_char(c0));     End If End Function

offline
  • Pridružio: 28 Jun 2004
  • Poruke: 990
  • Gde živiš: Kucura

Citat: Moze li mi ko napisati kod za validaciju kad je txtPIB.text prazno.

Moze ovako:

Private Sub txtpib_Change() If txtpib.Text = "" Then MsgBox "Vaš PIB je prazan.Unesite ga", vbCritical, "PIB" End If End Sub

...ali ovako ce ti izbaciti poruku ukoliko napises prvi broj pogresno pa ga izbrises.

Bolje je da taj deo koda ubacis pre:

...strI = txtpib.Text provera = ProveriPIB(strI) If IsNumeric(txtPIB.Text) = False Th...

znaci:

Private Sub cmdPIB_Click() Dim provera As Boolean Dim strI As String If txtpib.Text = "" Then MsgBox "Vaš PIB je prazan.Unesite ga", vbCritical, "PIB" Exit Sub End If strI = txtpib.Text provera = ProveriPIB(strI) ... ...

I plzz, koristi [ code ] tagove... (hmm tako se to zove... valjda.... Bebee Dol)

offline
  • Pridružio: 26 Jan 2006
  • Poruke: 233

Hvala
A sto se tice ovih Goto naredbi da li je ovo sto sam koristio ispravno?

offline
  • Pridružio: 23 Jun 2016
  • Poruke: 1

Drugari,

Puno vam hvala. Ovo rešenje od c8 do c0 radi. Konvertovao sam ga u Clarion i završio posao, Mnogo vremena sam izgubio tražeći pravo rešenje. Čudi me kako ga nisu objavili na sajtu Ministarstva. Treba ih podsetiti.

Ko je trenutno na forumu
 

Ukupno su 891 korisnika na forumu :: 9 registrovanih, 3 sakrivenih i 879 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: bigfoot, bojank, darios, havoc995, ILGromovnik, M1los, Vendox, Vlajman1957, šumar bk2