Cod de bare

De la Capisci

Salt la: navigare, căutare
Codul de bare de pe un pachet de gumă de mestecat Wrigley's

Codul de bare este reprezentarea vizuală a unei structuri de date creată cu scopul de a fi citită pe cale optică. Ceea ce poate părea cam stupid, fiindcă dumneavoastră tocmai citiţi reprezentarea vizuală a unei structuri de date (conţinutul acestui articol) creată cu scopul de a fi citită pe cale optică (care va să zică folosind ochii).

Cuprins

Ieri şi azi

De la bun început, codurile de bare au fost create pentru a fi citite cu uşurinţă de către sisteme automate. Textul este uşor de interpretat vizual de către oameni, însă din punctul de vedere al unei maşinării are câteva hibe majore:

  1. Literele pot arăta în multe feluri distincte, în funcţie de tipul de literă utilizat; aceste diferenţe sunt greu de interpretat automat.
  2. Textul este foarte uşor de mânjit, deformat sau citit strâmb, iar erorile introduse de aceşti factori sunt greu de corectat.
  3. Chiar şi după ce a fost citit şi interpretat nu există nicio garanţie că interpretarea a fost corectă.
  4. Nu este deloc economic în ce priveşte spaţiul utilizat; câteva cuvinte de text ocupă o suprafaţă în care s-ar putea include mult mai multe date folosind un sistem mai convenabil de codificare. Pentru un om acest aspect este relativ neimportant, însă pentru o maşină care are nişte limitări destul de drastice de rezoluţie şi este incapabilă să-şi „plimbe ochii” pe un text acest aspect este extrem de important.

Pe măsură ce a început adoptarea diverselor sisteme automatizate după cel de-al Doilea Război Mondial au apărut atât necesitatea unui sistem automatizat de interpretare a datelor cât şi diverse propuneri de standardizare a unui astfel de sistem. Primele încercări de standardizare a unui astfel de sistem datează încă din 1948, însă abia în 1974 a fost complet implementat primul sistem standardizat de imprimare şi interpretare a unui cod de bare (a fost scanat un pachet de gumă de mestecat Wrigley's care poate fi văzut şi astăzi la muzeul Institutului Smithsonian). În mod cu totul remarcabil, sistemul implementat în 1974 (şi care este în esenţă folosit şi în prezent pentru produsele de larg consum) a fost dezvoltat de Bernard Silver şi Norman Joseph Woodland, cei care au iniţiat cercetarea în acest domeniu în 1948 – iar partea remarcabilă este faptul că în aceşti 26 de ani conceptul a fost analizat şi implementat parţial (şi fără succes) de către mai multe companii din mai multe industrii.

Codul de bare implementat în 1974 a fost dezvoltat de către IBM la cererea Asociaţiei Naţionale a Lanţurilor Alimentare din SUA. Acest standard se numeşte Codul Universal pentru Produse (Universal Product Code), pe scurt UPC – şi încă este în 2010 unul dintre cele mai utilizate standarde de coduri de bare. Codurile UPC rezolvă toate problemele pe care le prezintă interpretarea automată a textului:

  1. Codul este în esenţă reprezentat ca un fel de semnal Morse binar [1] „lungit” pe verticală. Astfel toate semnele sunt simple şi arată întotdeauna la fel (nu există decât două opţiuni: spaţiu sau linie, pauză sau semnal, 0 sau 1).
  2. Deşi poate fi mânjit la fel ca şi literele, este greu de deformat (codul este format doar din spaţii şi linii drepte) şi nu contează dacă este citit strâmb, fiindcă lăţimea propriu-zisă a semnelor nu este importantă. Prin urmare chiar şi dacă este citit strâmb toate liniile şi toate spaţiile au dimensiuni egale între ele.
  3. Poate cel mai important aspect practic al standardului este faptul că orice cod de bare conţine o mică cantitate de informaţii redundante, numită sumă de control, şi care confirmă corectitudinea citirii. Acest aspect este critic deoarece permite operatorului uman să plimbe codul de bare în faţa cititorului automat pentru o perioadă nelimitată de timp, iar cititorul încearcă interpretări repetate până când una dintre interpretări este validată. Odată validată citirea, operatorul uman este notificat în privinţa reuşitei citirii (de obicei notificarea are forma piuitului pe care-l auziţi la casa de marcat atunci când casiera scanează produsele). În absenţa implementării unei sume de control care să poată fi validată automat, operatorul ar fi nevoit să valideze (sau să invalideze) în mod explicit fiecare dintre încercările repetate ale sistemului automat. O astfel de abordare ar fi în mod evident falimentară, fiindcă ar presupune o pierdere de timp mai mare chiar decât introducerea manuală a datelor.
  4. Codurile de bare UPC şi toate codurile similare sunt reprezentate pe o suprafaţă semnificativ mai mare decât ar fi necesar pentru reprezentarea aceleiaşi informaţii ca text lizibil. Însă există o nuanţă importantă aici: pentru un sistem de citire automat nu este importantă cantitatea de spaţiu utilizată pentru reprezentarea informaţiei ci cantitatea de informaţie citită în scopul interpretării. Iar codurile uzuale de bare sunt citite folosind senzori optici care monitorizează o bandă extrem de îngustă ce traversează (aproape indiferent de unghi) întreaga lăţime a codului de bare. Mai mult, această bandă foarte îngustă este interpretată ca o secvenţă unidimensională de semnale şi pauze – din acest motiv familia de coduri de bare folosite în mod uzual în supermagazine are numele generic de coduri de bare unidimensionale. Teoretic toată informaţia dintr-un astfel de cod de bare ar putea fi reprezentată în mod similar codului Morse, printr-o înşiruire foarte îngustă de linii şi spaţii. Codurile de bare unidimensionale sunt lăbărţate pe verticală numai pentru a permite operatorului să poziţioneze codul de bare în mod aproximativ în faţa cititorului, dar cititorul nu trebuie să proceseze decât o cantitate foarte mică de informaţie culeasă de pe întreaga suprafaţă a codului de bare.

Coduri de bare bidimensionale

Cod de bare QR Code care conţine adresa acestei pagini

Toate codurile de bare sunt tipărite pe un suport care prin natura lui este bidimensional. După cum am văzut în secţiunea anterioară, codurile de bare au fost la început exclusiv unidimensionale numai din cauza unor limitări tehnice (atât ale senzorilor cât şi ale posibilităţilor de procesare a datelor). Pe măsură ce posibilităţile tehnice au crescut a devenit evident că s-ar putea implementa standarde de coduri de bare bidimensionale a căror interpretare automată să nu fie deosebit de costisitoare.[2]

Codurile de bare bidimensionale păstrează mai toate caracteristicile codurilor de bare unidimensionale identificate mai sus: reprezentarea este standardizată, semnele sunt uşor de identificat şi conţin o sumă de control. Pe de altă parte un cod de bare bidimensional trebuie interpretat în ansamblul său, spre deosebire de un cod de bare unidimensional în cazul căruia este suficient să fie identificată o singură fâşie de semnal nealterat, la orice unghi valid. Astfel, un cod de bare unidimensional beneficiază de două feluri de redundanţă: pe de o parte există o sumă de control introdusă în datele propriu-zise, iar pe de altă parte există redundanţa fizică dată de alungirea verticală a semnalului. Pentru a compensa imposibilitatea de alungire a semnalului, un cod de bare bidimensional conţine nu două, ci trei tipuri de redundanţă: în primul rând, datele sunt reprezentate fizic prin pătrăţele supradimensionate faţă de capacitatea senzorului; în al doilea rând, există o sumă de control similară celei folosite de codurile de bare bidimensionale; iar în al treilea rând, informaţia propriu-zisă conţinută în codul de bare include o cantitate suplimentară de date redundante, în aşa fel încât şi un cod de bare parţial compromis să poată fi interpretat corect. Acest ultim parametru este dimensiunea suplimentară de redundanţă faţă de codurile de bare bidimensionale şi poate fi specificat în mod explicit de către persoana care generează codul de bare, în aşa fel încât să poată fi modificat în funcţie de mediul de prezentare (un cod de bare prezentat pe monitor nu trebuie să conţină la fel de multe date redundante ca un cod de bare tipărit pe un afiş publicitar care poate fi mâzgălit cu grafitti şi stropit cu noroi de maşinile din trafic). Pe de altă parte, dată fiind exploatarea celei de-a doua dimensiuni pentru codificare, cantitatea de informaţie care poate fi codificată pe unitatea de suprafaţă este semnificativ mai mare decât în cazul codurilor unidimensionale. Dacă în cazul unui cod de bare unidimensional textul echivalent ar putea fi reprezentat pe o suprafaţă ceva mai mică, în cazul unui cod de bare bidimensional textul echivalent ar necesita o suprafaţă cu mult mai mare pentru a fi lizibil.

În practică, faptul că mijloacele tehnice au permis în mod literal introducerea unei noi dimensiuni în reprezentarea codurilor de bare a permis şi figurativ introducerea unei noi dimensiuni de utilizare a codurilor de bare. Un cod de bare unidimensional poate conţine un şir de caractere. De exemplu numărul de inventar al unui produs. Sau un număr de telefon. Sau un nume. Sau o adresă e-mail. Pe de altă parte un cod de bare bidimensional permite stocarea unui şir de caractere mai lung sau, mult mai interesant, mai multe şiruri de caractere în mod simultan: pe o dimensiune se află informaţia şi pe cealaltă dimensiune se stochează tipul informaţiei. În acest fel se pot stoca date structurate: nume şi număr de telefon şi adresă e-mail şi aşa mai departe, toate într-un singur cod de bare.[3] În acest fel se pot genera coduri de bare unice care să includă de exemplu toate datele unei cărţi de vizită într-un format care poate fi interpretat automat de către un telefon mobil.

Coduri de bare tridimensionale

Cod de bare Microsoft tag (HCCB) care conţine adresa acestei pagini

Ei hai că asta-i prea de tot, nu-i aşa? Era logic să avansăm de la coduri de bare unidimensionale la coduri bidimensionale, însă extrapolarea la a treia dimensiune pare de-a dreptul ridicolă: cine stă să sculpteze coduri de bare în trei dimensiuni? Nimeni, e drept, însă aţi uitat un amănunt: dimensiunile despre care vorbim aici nu sunt neapărat cele fizice, ci ţin doar de reprezentarea informaţiei.

Dacă în anii 1970 senzorii şi puterea de calcul nu puteau permite în mod rentabil decât interpretarea unei singure dimensiuni, anii 1990 au văzut îmbunătăţiri tehnice suficient de semnificative în aceste domenii încât să permită introducerea unor noi standarde care să utilizeze şi o a doua dimensiune. Printr-o evoluţie pe care o veţi accepta şi dumneavoastră câteva rânduri mai jos ca fiind naturală, în anii 2000 tehnicile de tipărire, captare şi interpretare a imaginii s-au îmbunătăţit în asemenea măsură încât a devenit evidentă posibilitatea practică a utilizării unei a treia dimensiuni pentru stocarea informaţiei, atât în ceea ce priveşte scrierea cât şi în ceea ce priveşte citirea ei: culoarea. Într-adevăr, de ce să ne limităm la coduri de bare alb-negru dacă avem atât imprimante cât şi aparate foto bine calibrate pentru culoare?

Pentru moment (în 2010), codurile de bare tridimensionale se află într-o fază incipientă – numai câteva aplicaţii le exploatează în practică. Din punct de vedere teoretic ar exista probabil puterea de calcul necesară pentru interpretarea acestor coduri de bare chiar şi la nivelul dispozitivelor mobile, însă calitatea senzorilor optici şi mai ales a interpretării luminii ambientale în scopul corecţiei automate de culoare sunt încă aspecte problematice. Este însă perfect rezonabil să ne aşteptăm o evoluţie de la coduri de bare unidimensionale către coduri de bare bidimensionale în aplicaţii industriale pe termen scurt şi o migrare către coduri de bare tridimensionale pe termen mediu sau lung.

Trebuie menţionat totuşi că trecerea de la coduri de bare bidimensionale la coduri de bare tridimensionale nu poate adăuga aceeaşi cantitate nouă de informaţii ca trecerea de la coduri de bare unidimensionale la coduri de bare bidimensionale. Dacă a doua dimensiune duce la o creştere pătratică a capacităţii de stocare, introducerea culorii duce doar la o creştere pe patru-cinci ori a capacităţii de stocare (cel puţin în măsura în care culoarea se află în spectrul vizibil, din cauza necesităţii de compensare pentru condiţiile nesigure de iluminare; coroborând cu necesităţile de rentabilitate ale imprimării unui cod de bare industrial este foarte probabil că această a treia dimensiune va fi permanent limitată la culorile vizibile).

Codificare multidimensională

În paralel cu tehnologia codurilor de bare s-a dezvoltat o tehnologie paralelă care nu are nimic comun cu codurile de bare în privinţa aspectului, însă adresează aceeaşi problemă: stocarea unei cantităţi cât mai mare de informaţie într-un spaţiu cât mai mic şi cu costuri cât mai mici: RFID. În loc să stocheze informaţia în formă vizuală, RFID stochează informaţia în formă electronică şi permite interacţiunea prin unde radio. Dat fiind că RFID utilizează o paradigmă complet diferită este firesc să prezinte atât avantaje cât şi dezavantaje semnificative faţă de codurile de bare:

  • RFID poate stoca o cantitate teoretic nelimitată de informaţii. În practică standardele în vigoare impun anumite limite, însă acestea sunt artificiale (impuse de standarde) şi nu naturale (impuse de spaţiul disponibil pe suprafaţa produsului, sau de limitele tehnice ale senzorilor). Chiar şi numai această unică diferenţă produce efecte extraordinare faţă de paradigma codurilor de bare: dacă un cod de bare UPC poate stoca tipul de produs (gumă de mestecat Wrigley's cu mentă sau gumă de mestecat Wrigley's cu căpşuni), un cod RFID poate identifica un anume produs individual (pachetul de gumă de mestecat Wrigley's cu mentă din lotul X, produs la data Y în secţia Z). Simpla identificare a unui produs anume va produce o modificare radicală de percepţie pentru toate părţile implicate.[4]
  • RFID poate fi scanat de la distanţă. Nu pare c-ar fi cine ştie ce mare brânză dacă vă gândiţi numai la casa de marcat, însă gândiţi-vă la toată logistica anterioară acelui moment: containere din TIR-uri, vagoane şi vapoare; vame; depozitul producătorului, al magazinului, al pieţei, al supermarket-ului, al restaurantului; raftul din magazin sau din supermagazin. La fiecare pas cineva trebuie să scoată fiecare produs individual şi să verifice tot felul de indicatori ca să se asigure că bunul poate fi vândut în condiţiile legii (n-a expirat, nu este interzis, a fost produs după standardele curente). Majoritatea acestor teste ar putea fi efectuate de la distanţă de către un operator care ar citi codurile RFID ale produselor aflate în containere sau în fundul rafturilor.
  • RFID este o tehnologie incomparabil mai costisitoare decât codurile de bare. Acesta este motivul pentru care, cel puţin deocamdată, RFID este folosit mai degrabă pentru loturi de produse (şi nu produse individuale) sau pentru produse individuale foarte scumpe; în mod evident, este utilizat incomparabil mai puţin decât codurile de bare. Un cod de bare, chiar şi unul tridimensional, poate fi tipărit odată cu ambalajul produsului. Un cod RFID este o componentă electronică ce trebuie achiziţionată, progrmată şi ataşată explicit fiecărei unităţi produse în parte. Astfel este rezonabil din punct de vedere economic să se ataşeze câte un cod RFID fiecărui container de marfă, dar cel puţin deocamdată nu este rezonabil să aşteptăm coduri RFID pe fiecare ou.

Legături externe

Note

  1. Codul Morse nu este binar fiindcă nu foloseşte două tipuri de semnale, ci cinci: semnal scurt (punct), semnal mediu (linie), pauză scurtă (între semnale individuale), pauză medie (între caracterele formate din câteva semnale), pauză lungă (între cuvinte) şi pauză foarte lungă (între propoziţii).
  2. În mod ironic primul patent pentru coduri de bare, înregistrat încă din 1949 de Woodland şi Silver, includea două formate de coduri de bare. Unul era cel liniar (cel care a generat întreaga familie curentă de coduri unidimensionale), iar celălalt era circular, practic necunoscut astăzi. Codul de bare circular era în realitate tot unidimensional: în loc să întindă codul pe verticală, formatul circular îl rotea în jurul unuia dintre capete. Rezultatul era un cod de bare care putea fi citit la absolut orice unghi. Sau cel puţin asta spunea teoria.

    În practică însă s-a constatat că materialele tipărite sunt supuse din motive tehnologice unui oarecare grad de mânjire la un anume unghi preferenţial (unghiul la care se întâmplă să se mişte coala prin maşina de tipar). Prin urmare un cod de bare circular ar fi în realitate mânjit (deci greu de citit) la mai toate unghiurile teoretice de citire, mai puţin unghiul natural al procesului tehnologic de tipar. Este important de notat aici că indiferent dacă reprezentarea este liniară sau circulară, dimensiunea fizică concretă a liniilor şi spaţiilor din reprezentarea codului de bare trebuie să fie neimportantă, pentru că nu se poate garanta că operatorul uman va scana toate etichetele de la exact aceeaşi distanţă. Prin urmare sistemul de citire trebuie în mod necesar să poată interpreta dimensiuni diferite ale codurilor de bare, ţinând cont numai de raportul de lungime dintre diversele elemente. Această particularitate a sistemului permite o toleranţă unghiulară rezonabilă în citirea unui cod liniar, în măsura în care reprezentarea acestuia este suficient de mult lăţită pe verticală.

    Aşa se face că s-a ajuns la concluzia aparent contradictorie că reprezentarea liniară a unui cod de bare permite o toleranţă unghiulară mai mare decât o reprezentare circulară a aceleiaşi informaţii. Acesta este motivul pentru care codurile de bare liniare au proliferat până astăzi în timp ce codurile de bare circulare, teoretic superioare ca toleranţă, au dispărut în realitate din orice aplicaţie practică.

    Din anii 1970 când a fost adoptat standardul liniar de coduri de bare în defavoarea celui circular tehnica tiparului a avansat în asemenea măsură încât astăzi aproape orice tipăritură generică nu mai suferă de niciun efect semnificativ de mânjire, chiar şi atunci când tipărirea se face pe medii tradiţional dificile cum ar fi metalul sau plasticul. Totuşi lupta economică exploatează şi astăzi compromisul tehnic ascuns în standardele gândite acum 40 de ani: imprimantele moderne specializate pe tipărirea de coduri de bare au rezoluţie mare pe direcţia semnalului şi rezoluţie vizibil mai mică pe cealaltă axă.
  3. Deşi din punct de vedere al reprezentării informaţia stocată în coduri de bare bidimensionale chiar este bidimensională, standardele nu formalizează decât şiruri liniare de caractere. Acestea descriu structuri bidimensionale numai în măsura în care informaţia conţinută în codul de bare poate fi interpretată ca atare (de exemplu în format vCard, aşa cum este exemplul din articol de utilizare a codurilor de bare bidimensionale pentru cărţi de vizită). La prima vedere poate părea ciudat că şi codurile de bare bidimensionale conţin în fapt doar informaţie unidimensională, însă aceasta este o decizie foarte înţeleaptă. Dacă însăşi reprezentarea fizică ar impune o structură bidimensională atunci toate câmpurile ar putea conţine aceeaşi cantitate de date: adresa poştală ar fi limitată la acelaşi nivel de entropie ca şi numărul de telefon. O astfel de implementare ar fi în mod evident ineficientă, dat fiind că adresele poştale sunt cu multe ordine de mărime mai complexe decât numerele de telefon. Implementarea actuală nu impune limitări de acest fel şi prin urmare adresa poştală poate folosi şase rânduri de informaţie în timp ce numărul de telefon poate folosi jumătate de rând.
  4. Dacă citiţi nota de subsol înseamnă că n-aţi fost prea impresionat de posibilitatea de identificare a unui pachet de ciungă. Imaginaţi-vă atunci ce ar însemna să puteţi identifica porcul anume din care provine ceafa pe care o puneţi pe grătar. Imaginaţi-vă că ANPC ar impune fermierului să vă pună la dispoziţie filmul vieţii acelui porc individual, cu imagini din viaţa lui, cu dosarul medical veterinar, cu procedura de sacrificiu dacă vreţi să vă asiguraţi că a fost sacrificat într-un mod umanitar şi aşa mai departe. Acum extrapolaţi ideea pentru orice bun pe care îl achiziţionaţi: să vedeţi că pantofii sport nu au fost făcuţi de copii, ceasul nu a fost făcut pe vapor, cutia de cola este reciclată, oul vine într-adevăr de la o găină care locuieşte la curte şi aşa mai departe, pentru absolut orice bun pe care-l achiziţionaţi.