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).

codabar.gif

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).

code39.gif

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.

booklnd1.gif

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.

 

code128-sample.gif

 

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.

Industrial-2-of-5.jpg

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.

2of5interleave.gif

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).

ean13-2.gif

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.

 

ean8.png

 

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.

 

upc-a.png

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.

 

pdf417.jpg

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.

 

datamatrix.jpg

 

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).

.qr.jpg

 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;

·        ţ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 tabuAspect, 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.