Program C untuk barcode versi EAN 13


Kali ini saya ingin membuat barcode dengan program c dimana untuk konsep dasarnya menggunakan barcode versi EAN 13...program ini akan meminta input dari user berupa sebuah kode yang terdiri dari 12 digit desimal.. dan kode yang dimasukkan akan di validassi seperlunya,,dengan merubah sting ke integer dengan parse int.kemudian akan menghitung chek digitnya melalui konsep EAN serta menampilkan code barcode EAN untuk 12 digit tersebut beserta chek digitnya dalam windows tersendiri.. nah untuk menampilkan windows ini kita perlu program OpenGL dimana akan membantu untuk menampilkan barcode. barcode ini sangat berguna dalam dunia pemasaran dimana di supermarket/pusat pembelanjaan , barcode dipakai untuk mendeteksi code dari barang2 misalnya buku, penghapus dan lain2,,, berikut merupakan salah satu program untuk menampilkan barcode.. oh iya terlebih dahulu instal glut.h di komputer untuk menjalankan program ini karna program ini merupakan gabungan dari bahasa C dan OpenGL...


langsung aja ya ke programnya :


/*

@author : Deswati

@rogram : Program untuk menampilkan barcode versi EAN-13

*/

#include /*include file library stdio.h di blog ini ga bisa menampilkan program untuk include ini
#include "GL/glut.h"/*include file library GL/gluth.h untuk OpenGL
#include /* include file library string.h .untuk menangani karakter dan string

int kode[13]; /*deklarasi variabel kode sebagai variabel penyimpan angka-angka anggota barcode*/

void init (void)
{
glClearColor(1.0,1.0,1.0,1.0); /* Window berwarna putih. */
glMatrixMode(GL_PROJECTION); /* Menentukan parameter2 proyeksi */
gluOrtho2D(0.0, 600.0, 0.0, 500.0);
}

/* Fungsi untuk membuat graphics*/

void barChart (void)
{

int i, k;
GLint x=70; /*mengeset letak awal absis*/

glClear (GL_COLOR_BUFFER_BIT); /* Bersihkan window. */

glColor3f (0.0, 0.0, 0.0); /* Warna bar dan tulisan di-set ke hitam. */


int digit1 [10][6] = {0, 0, 0, 0, 0, 0, /*Direktori pola penerjemahan kode yang ditentukan oleh angka pertama barcode*/
0, 0, 1, 0, 1, 1, /*pola L diwakilkan dengan angka 0, sedangkan pola G diwakilkan dengan angka 1*/
0, 0, 1, 1, 0, 1,
0, 0, 1, 1, 1, 0,
0, 1, 0, 0, 1, 1,
0, 1, 1, 0, 0, 1,
0, 1, 1, 1, 0, 0,
0, 1, 0, 1, 0, 1,
0, 1, 0, 1, 1, 0,
0, 1, 1, 0, 1, 0 };

int kodeL [10][7] = {0, 0, 0, 1, 1, 0, 1, /*Direktori L, dimana setiap angka di-convert menjadi 7 bit yang berbeda*/
0, 0, 1, 1, 0, 0, 1,
0, 0, 1, 0, 0, 1, 1,
0, 1, 1, 1, 1, 0, 1,
0, 1, 0, 0, 0, 1, 1,
0, 1, 1, 0, 0, 0, 1,
0, 1, 0, 1, 1, 1, 1,
0, 1, 1, 1, 0, 1, 1,
0, 1, 1, 0, 1, 1, 1,
0, 0, 0, 1, 0, 1, 1 };

int kodeG [10][7] = {0, 1, 0, 0, 1, 1, 1, /*Direktori G, dimana setiap angka di-convert menjadi 7 bit yang berbeda*/
0, 1, 1, 0, 0, 1, 1,
0, 0, 1, 1, 0, 1, 1,
0, 1, 0, 0, 0, 0, 1,
0, 0, 1, 1, 1, 0, 1,
0, 1, 1, 1, 0, 0, 1,
0, 0, 0, 0, 1, 0, 1,
0, 0, 1, 0, 0, 0, 1,
0, 0, 0, 1, 0, 0, 1,
0, 0, 1, 0, 1, 1, 1 };


glRasterPos2i (x-30, 110); /*menge-set letak pencetakan angka pertama dari barcode yang dimasukkan*/
glutBitmapCharacter (GLUT_BITMAP_HELVETICA_12, (GLubyte) kode[0]+'0'); /*mencetak angka pertama barcode*/
/*dengan meng-convert angka dari int ke char.*/
/*GLubyte = char*/


for (i=0; i<2; i++) /*penggambaran dua garis Middle bars dengan letak lebih
rendah dibanding bar yang lain*/
{
glRecti (x, 130, x+5, 450);
x+=10; /*memberi jarak agar dua garis tidak berdampingan*/
}


for (i=1; i<7; i++) /*loop untuk angka barcode kesatu s.d keenam*/
{
glRasterPos2i (x+10, 110); /*menge-set letak pencetakan
angka barcode selanjutnya*/
glutBitmapCharacter (GLUT_BITMAP_HELVETICA_12, (GLubyte) kode[i]+'0');
/*mencetak angka barcode selanjutnya*/

switch (digit1[kode[0]][i - 1]) /*memilih pola barcode tergantung dr angka
pertama barcode yang disimpan dalam kode[0]*/
{
case 0: /*0 berarti memakai pola L*/
for (k = 0; k < 7; k++)/*dimana 1 angka diwakilkan 7 bit
berbeda*/
{
if (kodeL[kode[i]][k] == 1) /*penggambaran dilakukan bila
bit == 1*/
{
glRecti (x, 150, x+5, 450 );/*menggambar garis
dengan lebar koordinat persegi x1,y1,x2,y2*/
}
x+=5; /*mengeset x1 baru = x2*/

}
break;

case 1: /*1 berarti memakai pola G*/
for (k = 0; k < 7; k++) /* dimana 1 angka diwakilkan 7 bit berbeda*/
{
if (kodeG[kode[i]][k] == 1)/*penggambaran dilakukan bila bit
== 1*/
{
glRecti (x, 150, x+5, 450 );/*menggambar garis dengan
lebar koordinat persegi x1,y1,x2,y2*/
}
x+=5; /*mengeset x1 baru = x2*/

}
break;
}

}

x+=5; /*memberi jarak untuk menggambar Middle bars*/

for (i=0; i<2; i++) /*penggambaran dua garis Middle bars dengan letak lebih
rendah dibanding bar yang lain*/
{
glRecti (x, 130, x+5, 450);
x+=10; /*memberi jarak agar dua garis tidak berdampingan*/
}


for (i=7; i<13; i++)
{

glRasterPos2i (x+10, 110); /*menge-set letak pencetakan angka barcode
selanjutnya*/
glutBitmapCharacter (GLUT_BITMAP_HELVETICA_12, (GLubyte) kode[i]+'0');
/*mencetak angka barcode selanjutnya*/


for (k=0; k<7; k++) /*angka barcode ketujuh s.d ke ke-13 memakai pola R*/
{
if ( (1-kodeL[kode[i]][k]) == 1) /*direktori R adalah komplemen dari
directori kode L*/
{
glRecti (x, 150, x+5, 450 );
}
x+=5;
}
}

for (i=0; i<2; i++) /*penggambaran dua garis End bars dengan letak lebih
rendah dibanding bar yang lain*/
{
glRecti (x, 130, x+5, 450);
x+=10; /*memberi jarak agar dua garis tidak berdampingan*/
}

x = 70; /*menge-set kembali absis agar letak pencetakan angka tidak berubah*/

glFlush(); /* Proses semua tampilan dengan secepat mungkin */
}

int main(int argc, char** argv) {

int i, k;
char input[13];


glutInit(&argc, argv); /* Inisialisasi GLUT */

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); /* Tentukan display-mode */

glutInitWindowPosition(100, 100); /* Tentukan posisi kiri-atas window */

glutInitWindowSize(300, 300); /* Tentukan lebar dan tinggi window */

glutCreateWindow("Menampilkan Bar-Chart"); /* Buat window. */

init(); /* Laksanakan prosedur inisialisasi */

printf ("Masukkan kode berupa 12 digit\n");

gets(input); /*menyimpan masukan user sebagai string*/

for (i=0; i<12; i++) /*validasi masukan*/
{
if (input[i]<'0' || input[i]>'9') /*mengakhiri program jika ada unsur
masukan diluar angka*/
{
printf("Masukan yang anda masukkan salah\nTekan spasi untuk keluar");

getchar();
return 0;
}

if (strlen (input) != 12) /*mengakhiri program jika angka yang dimasukan
tidak berjumlah 12*/
{
printf("\nMasukan yang anda masukkan salah\nTekan spasi untuk keluar");

getchar();
return 0;
}

}

for (i=0; i<12; i++) /*menyimpan nilai int yang sebenarnya dari masukan*/
{
kode[i] = (int) input[i] - '0';
}

for (i=0; i<12; i+=2) /*proses perhitungan cheksum digit (digit ke-13)*/
{
kode[12] += kode[i]; /*angka ganjil mempunyai bobot 1*/
}
for (i=1; i<12; i+=2)
{
kode[12] += kode[i]*3; /*angka genap mempunyai bobot 3*/
}
kode[12] = (10 - (kode[12]%10)) % 10;

glutDisplayFunc(barChart); /* Menampilkan graphics ke window */

glutMainLoop(); /* Membuat tampilan dan tunggu */

return 0;
}

NICE PROGRAMMING :)

0 Response to "Program C untuk barcode versi EAN 13"

Posting Komentar