////////////////////////////////////////////////////////////////////////////
// ITS – Visoka Škola Strukovnih Studija Za Informacione Tehnologije
//
http://www.its.edu.rs/
// Predmet: Osnovi Programiranja – Programski jezik C
//
// Primer: Program za proveru tacnosti bar koda. Po standardu
// bar kod se sastoji od 13 cifara, kontrola se vrsi:
// suma svih cifara na parnim pozicijama pomnozena sa 3 se sabira
// sa sumom cifara na neparnim pozicijama sem poslednje, dobijena
// suma se deli po modulu 10 i dobijeni ostatak pri deljenju se
// oduzima od broja 10. Dobijeni broj je kontrolni broj i cini
// poslednju cifru bar koda, ako kontrolni broj nije jednak
// poslednjoj cifri bar kod nije tacan!
// Nacin izracunavanja preuzet iz SLUZBENOG GLASNIKA
////////////////////////////////////////////////////////////////////////////

 

#include<stdio.h>

 

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

 

main()
{

 

//deklarisanje promenljivih
int x[13], kBr, i;

 

//zaglavlje, radi lepseg prikaza
printf("
************************************************
");
printf("************************************************
");
printf("**                                                                               **
");
printf("** >>PROGRAM ZA PROVERAVANJE ISPRAVNOSTI BAR KODA<< **
");
printf("**                                                                                **
");
printf("** BROJ UNOSITE: -broj<razmak>broj…                            **
");
printf("** -broj<ENTER>broj…                                                  **
");
printf("**                                                                                 **
");
printf("*************************************************
");
printf("*************************************************

");

 

 

//poruka korisniku za unos bar koda
printf(" * Unesite bar kod:
");

 

 

//petlja za unos cifara bar koda
for(i=0;i<13;i++)
   
{
     
scanf("%d",&x[i]);
   
}

 

//poziv funkcije
kBr=provera(x);

 

 

//provera da li je poslednja cifra bar koda jednaka kontrolnom broju
if(kBr==x[12])
 
{
   
//poruka korisniku
   
printf("
****************************
");
    
printf("* VAS BAR KOD JE ISPRAVAN! *
");
    
printf("****************************
");
  
}

 

//u koliko nije jednak poruka o gresci
else
  
{
    printf("
****************************
");
   
printf("* VAS BAR KOD NIJE ISPRAVAN! *
");
   
printf("****************************
");
  
}

}

 

 

//funkcija koja izracunava kontrolni broj
int provera(int x[])
{

 

//deklarisanje promenljivih
int i, suma=0, suma1=0, suma2=0, suma3=0, c, kontrolniBroj;

 

 

 

//for petlja koja se krece od prve do poslednje cifre bar koda
for(i=0;i<13;i++)
  
{
    
//suma cifara koje se nalaze na parnim pozicijama
    
suma1=x[1]+x[3]+x[5]+x[7]+x[9]+x[11];

 

     //dobijena suma parnih pozicija pomnozena sa 3
    
suma2=3*suma1;

 

     //suma cifara, sem poslednje, koje se nalaze na neparnim pozicijama
    
suma3=x[0]+x[2]+x[4]+x[6]+x[8]+x[10];

 

    //zbir cifara na parnim i neparnim pozicijama
   
suma=suma2+suma3;
  
}

 

 

 

//promenljiva 'c' predstavlja ostatak pri deljenju krajnje sume po modulu 10
c=suma%10;

 

 

 

//provera, u koliko nema ostatka pri deljenju kontrolni broj je 0
if(c==0)
 
{
   
kontrolniBroj=0;
  
}


//u koliko ima ostatka
//od broja 10 se oduzima broj ostatka i dobijeni broj predstavlja kontrolni
else
  {
   
kontrolniBroj=10-c;
 
}

 

 

//funkcija vraca rezultat
return kontrolniBroj;

}