////////////////////////////////////////////////////////////////////////////
// ITS – Visoka Škola Strukovnih Studija Za Informacione Tehnologije
//
https://www.its.edu.rs/
// Predmet: Osnovi Programiranja – Programski jezik C
//
// Primer: Program koji proverava tacnost JMBG. Izracunavanje:
// prvih 6 cifara unetog JMBG zatim sledecih 6 se mnoze sa
// 7, 6,…2 zasebno. Suma svih proizvoda se deli po modulu 11
// u koliko je ostatak pri deljenju 0 ili 1 kontrolni broj je 0
// u suprotnom kontrolni broj se dobije oduzimanje dobijene
// sume od 11. Ako je kontrolni broj jednak poslednjoj cifri
// unetog JMBG – JMBG je ispravan!
// Nacin izracunavanja preuzet iz SLUZBENOG GLASNIKA.
////////////////////////////////////////////////////////////////////////////

 

#include<stdio.h>

 

//prototip funkcije
int provera(int x[], int i);

 

main()
{

 

//deklarisanje promenljivih
int x[13], i, kb=0;

 

//zaglavlje programa, radi lepseg prikaza
printf("
<><><><><><><><><><><><><><><>
");
printf("<>                                             <>
");
printf("<> PROGRAM ZA PROVERAVANJE      <>
");
printf("<> TACNOSTI UNETOG JMBG!          <>
");
printf("<> Cifre unosite:                           <>
");
printf("<> broj<razmak>broj…                   <>
");
printf("<>                                              <>
");
printf("<><><><><><><><><><><><><><><>
");

 

//poruka korisniku o unosu maticnog broja
printf("

>> Unesite JMBG:
");

 

//for petlja koja se krece od prve do poslednje cifre u maticnom broju
for(i=0;i<13;i++)
  {
    
scanf("%d",&x[i]);
  }

 

//poziv funkcije za proveru jmbg
kb=provera(x,i);

 

 

//provera, ako je kontrolni broj jednak poslednjoj cifri jmbg
if(kb==x[12])
 
{
   
//poruka korisniku o tacnosti jmbg
   
printf("
<><><><><><><><><><><><><><><>
");
    printf("<> Unreti JMBG je ispravan! <>
");
    printf("<><><><><><><><><><><><><><><>
");
 
}

else
  {
   
//poruka korisniku o gresci prilikom unosa jmbg
   
printf("
<><><><><><><><><><><><><><><><>
");
    printf("<> Uneti JMBG nije ispravan! <>
");
    printf("<><><><><><><><><><><><><><><><>
");
 
}

}

 

//funkcija za racunanje kontrolnog broja
int provera(int x[], int i)
{

//deklarisanje promenljivih
int m, suma=0, kont=0, kontrolniBroj=0, rez=0;


//broj clana niza pre ulaska u petlju
i=0;

 

 

//racunanje sume: svaki clan niza(od 0-og do 5-og) se mnozi posebno sa
//clanovima for petlje(od 7 do 2)
//prvi clan niza*7+drugi*6+….
for(m=7;m>1;m–)
  
{
         
suma+=m*x[i];
     
i++;   //uvecavanje clana niza
   
}

 

//broj clanova niza pre ulaska u petlju
i=6;

 

//akumuliranje sume za preostalih 6 clanova unetog niza
for(m=7;m>1;m–)
   
{
       
suma+=m*x[i];
    
i++;
}

 

 

//ostatak pri deljenju krajnje sume po modulu 11
kont=suma%11;

 

//provera, ako je rezultat funkcije jednak 1 ili 0
//kontrolni broj je 0
if(kont==0 || kont==1)
 
{
     
kontrolniBroj=0;
 
}


//ako nije kontrolni broj se dobija oduzimanjem rezultata od 11
else
  
{
    
kontrolniBroj=11-kont;
   
}

 

//funkcija vraca rezultat
return kontrolniBroj;
}