[ Cola @ 27.08.2008. 07:35 ] @
Imao sam zadatak da validiram JMBG i JIB
na netu sam našao dio koda koji validira JMBG i to super radi

Code:

private bool ProveriJMBG(string JMBG)
        {
            if (JMBG.Length < 13)
                return false;                
            
            try 
            {
                long mb = Convert.ToInt64(JMBG);
            }
            catch
            {
                return false;
            }
            
            int [] p = new int[12];
            int p13 = 0;
            
            p[0] = (JMBG[0] - '0') * 7;
            p[1] = (JMBG[1] - '0') * 6;
            p[2] = (JMBG[2] - '0') * 5;
            p[3] = (JMBG[3] - '0') * 4;
            p[4] = (JMBG[4] - '0') * 3;
            p[5] = (JMBG[5] - '0') * 2;
            p[6] = (JMBG[6] - '0') * 7;
            p[7] = (JMBG[7] - '0') * 6;
            p[8] = (JMBG[8] - '0') * 5;
            p[9] = (JMBG[9] - '0') * 4;
            p[10] = (JMBG[10] - '0') * 3;
            p[11] = (JMBG[11] - '0') * 2;
            
            for (int i=0;i<12;i++)
                p13+=p[i];            
            
            p13 = p13 % 11;
            p13 = 11-p13;
            
            if (p13==11)
                p13=0;
            
            if ((p13==10) || (p13!=(int)JMBG[12]-'0'))
                return false;
            else            
                return true;            
        }


u ovom kodu se još mogu izvći datum rođenja i pol.
Za JIB ove dve informacije nisu bitne pa sam ih sklonio iz koda

Ovaj kod ne prolazi za sve JIB-ove npr. 4400286760000

Znam da je za JIB uslov da
Code:

JMBG[0] == '4';

tj prva cifra mora biti 4

međutim JIB-ovi koji završavaju na sa cifrom nula (kontrolna cifra je nula) ne prolaze validaciju jer u kodu za JMBG piše ako je p13==10 da će vratiti false tj neuspješnu validaciju, a baš za te JIBove koji završavaju sa cifrom 0 dobijemo da je p13==10. Navedeni JIB je validan i ako za njega provjerimo dobićemo da je p13 jednako 10.

Da li neko zna algoritam za validaciju JIBa??? Ne znam koliko je to interesantno tj, da li se razlikuje ali ovo je za BIH teritoriju (možda se za Sr i Hr razlikuju)

Hvala
[ c00l3D @ 27.09.2008. 11:22 ] @
Mrsko mi je bilo brisati sad funkciju uglavnom ovaj kod radi za sve MB i JIB (bar je meni do sad radio ako javis da neki ne radi javi mi)

Uglavnom u ovom projektu imam jednu formu sa dugmetom i textboxom i ovo je event kad kliknes na dugme

Code:

        private void button1_Click(object sender, EventArgs e)
        {
            string broj1;
            double suma;
            int kontrolni = 0, izracunati = 0;
            int i=1;
            //char[] charArray;

            suma = 0;
            broj1 = System.Convert.ToString(textBox.Text);

            //charArray = broj1.ToCharArray();

                foreach (char c in broj1)
                {
                    switch (i)
                    {
                        case 1:
                        case 7:
                            suma += System.Char.GetNumericValue(c) * 7;
                            break;
                        case 2:
                        case 8:
                            suma += System.Char.GetNumericValue(c) * 6;
                            break;
                        case 3:
                        case 9:
                            suma += System.Char.GetNumericValue(c) * 5;
                            break;
                        case 4:
                        case 10:
                            suma += System.Char.GetNumericValue(c) * 4;
                            break;
                        case 5:
                        case 11:
                            suma += System.Char.GetNumericValue(c) * 3;
                            break;
                        case 6:
                        case 12:
                            suma += System.Char.GetNumericValue(c) * 2;
                            break;
                        case 13:
                            kontrolni = (int)System.Char.GetNumericValue(c);
                            break;
                    }
                    i++;
                }

                i = broj1.Length;
            
                izracunati = 11-((int)suma % 11);
                if (izracunati >= 10) izracunati = 0;

                if ((izracunati == kontrolni) && (i == 13))
                {
                    label2.Font = new System.Drawing.Font("System", 10, FontStyle.Bold);
                    label2.ForeColor = Color.ForestGreen;
                    label2.Text = "Ovaj JMBG je validan!";
                    //MessageBox.Show("Ovaj JMBG je validan!");
                }

                else
                {
                    label2.Font = new System.Drawing.Font("System", 10, FontStyle.Bold);
                    label2.ForeColor = Color.OrangeRed;
                    label2.Text = "Ovaj JMBG nije validan!";
                    //MessageBox.Show("Ovaj JMBG nije validan!");
                }
            }



POZDRAV
[ Cola @ 27.09.2008. 12:02 ] @
Za ovaj kod će proći svi JMBGovi i JIBovi jer je manje restriktivan radi sledeće linije koda
Citat:

if (izracunati >= 10) izracunati = 0;


Mislio sam da li neko zna da li se i 10 i 11 pretvaraju u 0 (kao u ovoj gore liniji) ili smo 11, a za 10 je nevalidno (jer sam nailazio i na takve kontrole).
Za JIBove imaš uslov da počinju sa 4 (bar su meni tako rekli)

Pozz i hvala