Generarea şi interpretarea codurilor de bare 1D şi 2D
1.
Obiectivul lucrării
Scopul acestei lucrări este familiarizarea cu noţiunile legate de
codurile de bare, o metodă modernă şi foarte eficientă de
menţinere a stocurilor informatizate pentru întreprinderi sau magazine. În
cadrul lucrării, se vor putea studia principiile de traducere a
informaţiilor în coduri de bare, diferitele metode de citire şi de
imprimare a codurilor de bare, precum şi modalităţile de a crea
programe pentru imprimarea codurilor de bare.
2.
Introducere teoretică
Tehnologia codurilor de bare
reprezintă cea mai larg utilizată metodă în industria
identificării automate, datorită multiplelor sale avantaje:
·
viteză de citire
ridicată: 200 scanări/secundă;
·
fiabilitate ridicată: o
eroare (în medie) la 3 milioane de caractere;
·
aplicare, practic, pe orice
suport, folosindu-se etichete autoadezive din diferite materiale (plastic,
aluminiu etc.).
Pentru a concepe şi a pune
în aplicare un sistem de cod de bare, este indispensabil să se
înţeleagă bine elementele majore dintr-un sistem de coduri de bare:
simbolica, suportul, imprimanta, operatorul, dispozitivul de lectură
şi decodorul.
La codurile de bare, datele sunt
stocate sub forma unor serii de bare şi de intervale (spaţii)
imprimate pe un suport. Configuraţia de bare/intervale necesară
pentru reprezentarea unui caracter particular depinde de simbolica codului.
Deci, pentru alegerea unei simbolistici, trebuie avute în vedere formatul
datelor (numeric sau alfanumeric), numărul caracterelor pe mesaj,
spaţiul disponibil pentru simboluri şi normele existente în
industrie. Suportul şi imprimanta constituie, împreună, modul de
generare a simbolurilor. Suportul folosit este de obicei o etichetă, o
scrisoare sau un document. Imprimarea simbolurilor se poate face în timp real,
la cerere sau pe un lot, printr-un procedeu de pre-imprimare.
Datele sunt recuperate din
simboluri prin intermediul unui lector optic, care produce un semnal logic
corespunzător diferenţei de reflectivitate dintre barele imprimate
şi suport (intervalele). Datele stocate în serie în simbol sunt recuperate
prin baleierea barelor şi a intervalelor printr-o mişcare
regulată şi continuă. Această mişcare poate fi
făcută de un operator care deplasează un lector, printr-o
oglindă turnantă care deplasează un fascicol luminos sau de
către un operator ori o bandă care deplasează simbolul prin
dreptul unui fascicol luminos fix.
Semnalul logic furnizat de
dispozitivul de lectură este tradus de un decodor, care transformă
fluxul de impulsuri seriale în date lizibile de către calculator. Lectorul
de coduri de bare în care se află decodorul trebuie să interpreteze
în manieră precisă simbolurile codului de bare, să ofere
informaţii operatorului şi să transmită datele la
calculator. Programul de decodare trebuie să fie conceput pentru a fi
tolerant faţă de erorile provocate de imprimantă, de lector sau
de operator, dar fără a fi în acest fel mai puţin precis. O
puternică toleranţă la erori permite decodorului să citească
o gamă largă de simboluri imprimate şi oferă în
practică o interfaţă mai agreabilă pentru operator.
Procesul folosit pentru
convertirea unui mesaj informatic în simboluri de cod de bare este un proces
simplu, în patru etape:
·
stabilirea tipului de date care
urmează a fi reprezentate şi a numărului de caractere al
mesajului;
·
traducerea informaţiei în
secvenţă binară. (numărul şi valoarea biţilor
sunt determinate de simbolistica aleasă);
·
crearea configuraţiei de
bare/intervale care reprezintă cuvântul binar definit în etapa a doua;
·
alăturarea diferitelor caractere
codate pentru a constitui un simbol care reprezintă mesajul complet.
Combinaţia bare înguste/bare
late şi intervale înguste/intervale late defineşte unic un caracter,
care poate fi literă, cifră, sau simbol.
Fiecare standard de cod de bare
defineşte cu precizie combinaţia de astfel de structuri pentru
fiecare simbol. Ea oferă cheia pentru codificare şi decodificare. În
acest fel, fiecare ansamblu de caractere devine un cod.
Parametrii unui specificator în
cod de bare sunt:
·
modulul –
lăţimea cea mai mică a unui interval sau a unei bare, cel mai
mic increment.
·
elementul – un interval
sau o bară, măsurat în număr de module.
·
caracterul – mai multe
elemente structurate conform standardului de cod de bare. Poate servi la
reprezentarea unui simbol, a unei cifre sau a unei litere. Totodată, poate
fi folosit la organizarea codului (început, sfârşit, control).
o
caracterul de start, care precede
primul caracter al mesajului, este o configuraţie specială de bare
şi intervale utilizată pentru identificarea începutului mesajului.
Decodorul trebuie să citească acest caracter înainte de preluarea
celorlalte informaţii.
o
caracterul de stop marchează
sfârşitul mesajului. Citirea acestuia asigură decodorul că
informaţia a fost citită corect şi determină calculul sumei
de control (dacă este cazul).
o
caracterul de control apare în
majoritatea standardelor cu titlu opţional, înaintea caracterului de stop.
Acesta este rezultatul unei operaţii aritmetice efectuate asupra
simbolului, conform unui algoritm prestabilit. La decodare, această
valoare este comparată cu rezultatul aceleiaşi operaţii de la
codare.
o
caracterele semnificative sunt
alcătuite dintr-un număr constant de elemente comune (de exemplu, la familia
de coduri de bare 2/5 într-un caracter există două bare late din cele
cinci elemente care formează caracterul).
·
raţia –
raportul dintre elementele late şi cele înguste (de exemplu, valoarea cea
mai uzuală este de 3/1).
·
densitatea –
numărul de caractere înscrise pe o lungime liniară dată.
Obţinerea unei densităţi mai mari sau mai mici se face prin
dilatarea sau contractarea unei densităţi medii. Folosirea unei
densităţi mari reduce dimensiunile codului, dar face mai
dificilă citirea. Densităţile mici implică un cod mai lung,
dar citirea este mai fiabilă (apare un număr mai mic de respingeri,
mai ales în cazul cititoarelor de la distanţă).
·
continuu/discontinuu
o
continuu – fiecare
caracter se alătură veciniilor săi. Se începe printr-o
bară, se sfârşeşte cu un interval. Două mărci
încadrează mesajul specificat: una de început, alta de sfârşit.
o
discontinuu –
fiecare caracter începe printr-o bară şi sfârşeşte printr-o
bară, iar între două caractere există un interval de dimensiune
fixă sau variabilă.
·
marginile – se
află de o parte şi de alta a codului, deci înainte de începerea
citirii şi după terminarea ei. Nu este permisă tipărirea în
aceste zone.
·
jocul de caractere –
lista completă a caracterelor unui cod, cu valorile lor binare.
Asigură legătura între prelucrarea informaţiei şi citirea
automată. Elementele late au valoarea 1, iar cele înguste, 0.
În continuare, se vor descrie
succint simbologiile codurilor de bare pe care le poate genere aplicaţia.
Standardul
Codabar poate codifica cifre de la 0
la 9, şase simboluri (-, :, ., $, /, +) şi caractere de start/stop A,
B, C, D, E, *, N, sau T. Aceste caractere trebuie folosite doar în perechi care
se potrivesc şi nu mai pot apărea în altă parte în codul de
bare. Codabar este folosit în biblioteci, bănci de sânge, în industria
curieratului rapid şi într-o largă varietate de aplicaţii de
procesare a informaţiei (vezi figura 1).
Fig. 1. Codul Codabar.
Codul 39 este prima simbologie alfa-numerică
dezvoltată, fiind încă utilizată pe scară largă, mai
ales în mediile non-retail. Setul de
caractere care pot fi codificate în codul de bare 39 include cifrele de la zero
la nouă, literele mari de la A la Z şi următoarele simboluri:
spaţiu ( ), minus (-), plus (+), punct (.), dolar ($), bară sau slash (/) şi procent (%). Fiecare
cod de bare conţine caractere speciale, care marchează începutul şi
sfârşitul acestuia (vezi figura 2).
Fig. 2. Codul 39.
Codul de bare Bookland este folosit la nivel internaţional pentru a
identifica produse precum cărţi, CD-uri, DVD-uri, casete video sau
audio, precum şi produse software. Numărul unic alocat fiecărui
tip de produs specificat anterior este International
Standard Book Number (ISBN). Există coduri ISBN de 10 sau de 13
caractere (vezi figura 3). Când un identificator este asociat unei edituri,
agenţia ISBN ia în considerare numărul de titluri de care editura respectivă
consideră că va avea nevoie. Editurilor mari le este atribuit un
identificator de editură mai scurt, tocmai pentru a rezerva mai mulţi
digiţi liberi pentru identificatorul de titlu.
Fig. 3. Codul Bookland.
Codul 128 este un cod cu o densitate bună pentru
caracterele alfanumerice şi o densitate foarte bună pentru caractere
numerice. Simbolul poate fi oricât de lung posibil pentru a stoca datele
codificate. Acesta a fost conceput pentru a codifica toate cele 128 de
caractere ASCII. Codul 128 include 107 caractere: 103 de caractere de date, 3
caractere de start şi un caracter de stop (vezi figura 4). Pentru a
reprezenta cele 128 de caractere ASCII, codurile de bare sunt
împărţite în trei subseturi: A, B şi C.
Fig. 4. Codul 128.
Codul 2/5 standard utilizează
cinci elemente binare pentru fiecare caracter. Două elemente din cadrul
unui caracter sunt 1, acestea fiind imprimate sub formă de bare sau
intervale late (vezi figura 5). Utilizarea a două elemente late dintr-un
total de cinci este o metodă simplă pentru verificarea corectitudinii
caracterului.
Fig. 5. Codul 2/5 standard.
Codul 2/5 întreţesut
este o simbologie cu o densitate ridicată şi este bazat pe codul 2/5 standard.
Acesta este utilizat în principal în distribuţie şi în depozite.
Simbologia 2/5 codifică orice număr de caractere numerice în lăţimi
(fie îngust, fie larg) de bare şi spaţii. Spre deosebire de codul 2/5
standard, care codifică numai informaţii în lăţimi de bare,
codul 2/5 întreţesut codifică datele prin lăţimea atât a barelor
cât şi a spaţiilor (vezi figura 6). Acest
lucru permite obţinerea unei densităţi mai mari decât în
varianta standard.
Fig. 6. Codul 2/5 întreţesut.
Codul de bare EAN-13
(original European Article Number,
dar acum redenumit International Article
Number) este folosit în întreaga lume pentru a marca bunuri comercializate
în regim retail. Acest cod de bare codifică 13 caractere numerice (12
caractere pentru date şi unul pentru verificare). Primele două sau
trei caractere reprezintă codul ţării în care este înregistrat
producătorul. Codul de ţară este urmat de 9 sau 10 caractere de
informaţie şi un caracter de control (vezi figura 7).
Fig. 7. Codul EAN-13.
Înainte ca un simbol să fie
codificat, trebuie să se calculeze caracterul de control, care va fi
adăugat la codul de bare. Cifra de control se bazează pe suma
ponderată a valorilor diferitelor caractere în sistemul numeric. Pentru
simbologia EAN-13, caracterul de control se calculează în modul
următor:
1.
Se
adună valorilor caracterelor numerice aflate în poziţiile
reprezentate de numere pare: 2, 4, 6, 8 etc.
2.
Se
înmulţeşte rezultatul cu 3.
3.
Se
adună valorile caracterelor numerice aflate în poziţiile reprezentate
de numere impare: 1, 3, 5, 7 etc.
4.
Se
însumează rezultatele paşilor 2 şi 3.
5.
Caracterul
de control este cel mai mic număr care, adunat cu rezultatul de la pasul
4, produce un multiplu de 10.
Exemplu. Fie şirul de caractere 007567816412K, unde
K este caracterul de control.
1.
2 +
4 + 1 + 7 + 5 + 0 = 19;
2.
19
× 3 = 57;
3.
1 +
6 + 8 + 6 + 7 + 0 = 28;
4.
57
+ 28 = 85;
5.
85
+ K = 90 (cel mai apropiat număr mai mare sau egal cu un multiplu de 10).
Rezultă
valoarea K = 5.
Codul EAN-8 este o versiune
redusă de EAN-13. El include un cod de ţară format din 2 sau 3
digiţi, 4 sau 5 digiţi de date (în funcţie de lungimea codului
de ţară) şi un digit de control (vezi figura 8). Chiar dacă
este posibilă ataşarea unui cod de bare format din 2 sau 5 digiţi,
scopul creării lui EAN-8 este acela de a ocupa cât mai puţin spaţiu
posibil.
Fig. 8. Codul EAN-8.
Codul UPC (Universal Product Code) este un standard
de cod de bare utilizat pe scară largă în Statele Unite ale Americii,
Canada, Marea Britanie, Australia, Noua Zeelandă şi în alte ţări,
pentru a urmări produsele în magazine. Forma sa cea mai comună,
UPC-A, constă din 12 cifre numerice (vezi figura 9). Împreună cu
codul EAN, UPC este codul de bare utilizat în principal pentru scanarea
produselor la punctele de vânzare.
Fig. 9. Codul UPC-A.
Codul PDF-417 este un cod de bare
bidimensional, care poate codifica până la 1800 de caractere printabile
ASCII (vezi figura 10). Forma sa este rectangulară poate fi
modificată prin setarea lăţimii şi permiţând înălţimii
să crească odată cu datele introduse.
Fig. 10. Codul
PDF-417.
Codul DataMatrix este un cod de bare
bidimensional, care poate stoca între 1 şi 2000 de caractere. Simbolul
grafic este un pătrat cu latura începând de la 0,00254 mm (0,001 inch) şi
până la 35,56 mm (14 inch). Ca exemplu de densitate, 500 de caractere
numerice pot fi codificate într-un pătrat cu latura de 2,54 mm (1 inch). Exemplul
de cod din figura 11 codifică 20 de caractere ASCII.
Fig. 11. Codul DataMatrix.
Codul QR (Quick
Response Code) este un cod de bare 2D matriceal. Poate codifica până
la 2509 caractere numerice sau 1520 de caractere alfanumerice şi
oferă 3 niveluri de control al erorilor.
Cel mai mic cod QR
este de 21 × 21 celule (fiecare celulă codifică un bit) şi poate
merge în multiplu de 4 celule până la dimensiunea de 105 × 105 celule.
Pătratele din colţurile din stânga jos, stânga sus şi dreapta
sus sunt pentru recunoaşterea tipului de etichetă (vezi figura 12).
.
Fig.
12. Codul QR.
Raţia unui cod de bare generat folosind această aplicaţie
este constantă şi este de 2/1. Densitatea codului de bare este
determinată de lăţimea barei înguste şi raportul dintre elementele late şi cele
înguste.
În funcţie de densitate, codurile de bare se
împart în:
·
coduri
ultra-dense (modulul mai mic decât 0,19 mm);
·
coduri
de înaltă densitate (modulul între 0,19 şi 0,24 mm);
·
coduri
de densitate medie (modulul între 0,24 şi 0,3 mm);
·
coduri
de densitate scăzută (modulul între 0,3 şi 0,53 mm);
·
coduri
de densitate foarte scăzută (modulul mai mare decât 0,53 mm).
3.
Descrierea aplicaţiei
Aplicaţia permite generarea unor coduri de bare folosind
următoarele simbologii: 2/7 (Codabar), 3/9 (Code 39), Bookland, Code 128A,
Code 128B, Code 128C, EAN13, cod 2/5 standard, cod 2/5 întreţesut, PDF-417, UPC-A, UPS, EAN-8, QR Code şi DataMatrix.
Se pot modifica următorii
parametri: culoarea de fundal, culoarea barelor, lăţimea celei mai mici bare şi înălţimea
codului de bare.
Interfaţa grafică a fost dezvoltată cu ajutorul programului
NetBeans. Aplicaţia are un meniu destul de simplu
şi uşor de folosit, care asigură
majoritatea opţiunilor necesare pentru generarea
şi setarea proprietăţilor pentru un cod de bare.
În figura 13 sunt prezentate
principalele elemente ale interfeţei
grafice pentru generarea codurilor de bare. Interfaţa grafică prezintă următoarele
elemente:
a)
element
de tip Jlist, prin care utilizatorul
poate alege simbologia pe care doreşte să o folosească pentru generarea codurilor
de bare;
b)
element
de tip Jlabel, folosit pentru a afişa codul de bare generat sub formă de imagine;
c)
element
de tip JTabbedPane, prin care se pot
modifica proprietăţile
codului de bare generat şi care
este împărţit în 3 elemente. În primul tab,
este afişată o scurtă descriere
a simbologiei alese la pasul a). În al doilea tab, culoarea barelor şi culoarea de fundal poate fi modificată.
Alegerea culorilor este filtrată, folosind combinaţii de culori
permise pentru bare şi
fundal. În al treilea tab, se pot modifica următoarele proprietăţi:
·
dacă
se afişează sau nu text sub codul
de bare generat;
·
lăţimea celei mai înguste bare;
·
înălţimea barelor.
d)
element
de tip JTextField, în care
utilizatorul poate introduce datele pentru codat în cod de bare. Mai
există două butoane, “Generare” şi “Resetare”, pentru generarea codului de bare şi pentru resetarea opţiunilor (lăţime bare, înălţime bare, culoare fundal şi culoare bare).
e)
element
de tip JButton, care permite
următoarele facilităţi:
·
salvarea
codului de bare generat ca imagine în formatul jpg într-un director ales de
utilizator;
·
deschiderea
formularului pentru recunoaşterea
codului de bare;
·
deschiderea
formularului pentru descrierea aplicaţiei.
Fig. 13. Interfaţa
aplicaţiei de generare a codurilor de bare.
Pentru a putea
genera corect un cod de bare folosind această aplicaţie, trebuie urmaţi
câţiva paşi. Paşii parcurşi în folosirea interfeţei
grafice pentru a genera un cod de bare sunt următorii.
A. Primul
pas este alegerea simbologiei pentru codul de bare (vezi figura 14).
Fig. 14. Alegerea simbologiei
unui cod de bare.
B. Al doilea pas este alegerea datelor care vor fi codate folosind codul de
bare (datele vor fi introduse în câmpul text indicat în figura 15).
Fig. 15. Alegerea
datelor pentru codat.
C. Următorul pas este schimbarea proprietăţilor codului de
bare (vezi figura 16).
Fig. 16. Alegerea
proprietăţilor codurilor de bare.
D. Ultimul pas: apăsarea butonului ”Generare”
pentru afişarea codului generat (vezi figura 17).
Fig. 17. Codul de
bare generat.
4.
Desfăşurarea lucrării
1.
Se rulează programul CodurideBare.
2.
Se alege mai întâi simbologia
pentru care se doreşte codarea (de exemplu, EAN-13).
3.
Se introduce în
căsuţa Data şirul de caractere care se
doreşte a fi codat (de exemplu, 123456789012).
4.
Se introduce în
căsuţa Data şirul un şir de caractere
diferit de şirul predefinit de aplicaţie. Se observă şi se
notează diferenţele (de exemplu, pentru simbologia EAN-13 se
introduce şirul: Abzz78351232).
5.
Se generează codul de bare,
apăsând butonul “Generare”. Se notează diferenţele dintre coduri.
6.
Din tabul Aspect, se selectează culorile pentru fundal şi
pentru bare. Se observă şi se notează care sunt cele mai bune
combinaţii de culori din punctul de vedere al contrastului obţinut.
7.
Se repetă paşii 2÷6
pentru toate posibilităţile din lista de simbologii.
8.
Pentru simbologia EAN-13, se
calculează caracterul de control pentru şirurile de caractere
123456789012, 400540128599 şi 801164211189, folosind algoritmul prezentat
în lucrare.
9.
Corectitudinea caracterelor de
control calculate se verifică prin generarea unui cod de bare EAN-13 în
aplicaţie.
10. Se repetă
paşii 9 şi 10 pentru un alt şir la alegere.
5.
Întrebări
1. Care este
diferenţa între modul de afişare de la codul 2/5 standard şi cel
de la codul 2/5 întreţesut?
2. Care este
motivul pentru care sunt folosite anumite combinaţii permise de culori
pentru fundalul şi barele unui cod de bare?
3. Care este
motivul pentru care a fost introdus caracterul de control, prezent doar la
anumite simbologii?
4. Care este
scopul folosirii caracterelor de start şi de stop ?
5. Care sunt
particularităţile codului 3/9?
6. Cum se pot
defini şi care sunt aplicaţiile codurilor poştale şi UPC-A?
7. Care
credeţi că este codul de bare cel mai potrivit pentru evidenţa
cărţilor dintr-o bibliotecă?
8. Ce se
întâmplă dacă se introduce un text de 2000 de caractere alfanumerice
în căsuţa Data pentru
simbologia QR? Cum se explică densitatea de informaţie foarte
ridicată a acestui cod de bare?
9. Ce se
întâmplă dacă se introduce un text de 2000 de caractere în căsuţa
Data pentru simbologia DataMatrix?
Cum se explică densitatea de informaţie foarte ridicată a
acestui cod de bare?
10. Este
posibilă schimbarea lăţimii barelor pentru codurile de bare 2D (
QR, DataMatrix şi PDF-417)?
11. Ce diferenţă
se observă între codurile de bare 128A, 128B şi 128C?
12. Modificarea
lăţimii celei mai mici bare are un efect asupra raţiei codului
de bare? Explicaţi.
13. Este
posibilă generarea în aplicaţie a unui cod de bare cu fundal roşu
şi bare galbene? Explicaţi.
14. Este posibilă
codarea unui şir de 13 caractere alfanumerice folosind simbologia EAN-13?
Explicaţi.
15. Daţi exemple de câteva
domenii în care aplicarea codurilor de bare reprezintă
o necesitate.
16. Propuneţi
optimizări care pot fi aduse acestei aplicaţii.