Você está na página 1de 8

LINGUAGEM DE PROGRAMAO DELPHI - Prof.

Alberto Cezar de Carvalho Pgina 1

Cdigos de barra EAN13:

1. COMO FUNCIONA:
A leitora tica foi projetada para ler barras ou ausncia de barras com 0,33 mm de espessura. Quando a barra existe, representa o algarismo binrio 1 e a sua ausncia representa o algarismo binrio 0. A existncia de barras mais grossas pura iluso, pois, na realidade, so vrias barras justapostas, representando uma seqncia de algarismos binrios 1. O mesmo acontece em relao aos espaos, isto , espaos maiores representam uma seqncia de algarismos binrios 0. Adotou-se comercialmente em todo mundo o cdigo EAN-13 como o padro para identificao de produtos comerciais. Apenas os Estados Unidos e o Canad no adotam este padro. Utiliza-se tambm o cdigo EAN-8, muito raramente, apenas quando o tamanho do produto impede o uso do cdigo EAN-13, pois, o primeiro utiliza 8 dgitos decimais para representar o cdigo do produto, enquanto que o segundo utiliza 13 algarismos decimais.

2. HARDWARE:
A leitora ligada na entrada para teclado da CPU e este na leitora, atravs de uma dupla de conectores presentes no final do cabo da mesma.

Para o teclado

Para a CPU

Desta forma, a leitora tica funciona como se fosse um teclado, no necessitando portanto de qualquer instalao de software. Como esto ligados em paralelo, tanto faz digitar os nmeros do cdigo de barras, como l-los atravs da leitora, que estes sero colocados no objeto que estiver focado no momento (edit, memo, dbedit, etc...).

LINGUAGEM DE PROGRAMAO DELPHI - Prof. Alberto Cezar de Carvalho Pgina 2

3. O CDIGO EAN-13:
Existe uma entidade mundial que controla a numerao dos produtos comerciais: a EAN. O Brasil se filiou mesma e recebeu o nmero 789 como prefixo de todos os seus produtos.

No nosso pas, quem controla a liberao dos nmeros a GS1 BRASIL, constituda oficialmente em 8 de novembro de 1983, a ABAC - Associao Brasileira de Automao Comercial - atualmente GS1 BRASIL, comeou a ser delineada em fevereiro daquele ano, quando a SEI - Secretaria Especial de Informtica - convocou empresas do comrcio para elaborar um documento refletindo as necessidades do setor com relao a automao comercial. (http://www.gs1brasil.org.br) Os 3 primeiros algarismos representam o Pas onde o produto foi embalado. Este nmero fornecido pela EAN mundial, que atribuiu ao Brasil, como j dissemos, o nmero 789. Para a Argentina, por exemplo, o nmero 779, etc. A G1 BRASIL estabeleceu que os 4 ou 5 algarismos decimais seguintes representariam a Empresa. Ela utiliza 4 algarismos quando a empresa produz muitos produtos. Esto disponveis no Brasil 6000 cdigos de Empresas nesta situao, estes cdigos so numerados de 0000 a 5999. So utilizados 5 algarismos para empresas com menor nmero de produtos. Neste caso, existem 40000 cdigos, numerados de 60000 a 99999. Os dgitos seguintes, exceto o ltimo, representam os cdigos dos produtos produzidos. Consideram-se produtos diferentes aqueles que, mesmo sendo do mesmo produto, tm embalagens diferentes, ou pesos diferentes, etc. Na realidade, o cdigo de barras dever identificar, sem nenhuma dvida o produto que est sendo comercializado. Estes cdigos de produtos, representados por 4 ou 5 algarismos (dependendo se a Empresa tem um cdigo com 5 ou 4 algarismos) so de responsabilidade da Empresa, e devem ser informados G1 BRASIL os cdigos escolhidos com a respectiva correspondncia ao produto produzido.

O ltimo dgito, o DGITO VERIFICADOR, que atravs de um pequeno algoritmo, verifica a autenticidade do nmero lido pela leitora de cdigos de barra, minimizando o erro de leitura da mesma. Existe a necessidade deste dgito, pois, se a leitora fizer a leitura de uma seqncia de algarismos errada (defeitos de impresso na embalagem, sujeira, amassados, descolorao, etc) o ltimo algarismo certamente ir dar diferente do que est gravado na embalagem, causando um erro de leitura. Existindo tal erro, a leitura repetida um certo nmero de vezes. Caso persista, a entrada do cdigo dever ser feita manualmente pelo teclado, fato que constatamos frequentemente nos supermercados.

LINGUAGEM DE PROGRAMAO DELPHI - Prof. Alberto Cezar de Carvalho Pgina 3

EXEMPLO:

7899168510017 = 789 91685 1001 7


Cdigo do Pas

Dgito verificador

Nmero do produto Nmero da empresa

4. ALGORITMO DO DGITO VERIFICADOR:


a) Numere os algarismos da esquerda para a direita (retirei o prprio dgito verificador):

7 8 9 9 1 6 8 5 1 0 0 1
01 02 03 04 05 06 07 08 09 10 11 12

b) Some todos os algarismos das posies mpares: 7 + 9 + 1 + 8 + 1 + 0 = 26 c) Some todos os algarismos das posies pares multiplicando-os por 3: 8 * 3 + 9 * 3 + 6 * 3 + 5 * 3 + 0 * 3 + 1 * 3 = 87 d) Some o resultado da letra b com o da letra c: 26 + 87 = 113 e) Ache o mltiplo de 10 mais prximo, para mais, do resultado da letra d: 113 120 f) O dgito verificador ser o valor da letra e menos o valor da letra d: 120 113 = 7 o dgito verificador ser 7.

5. DIMENSES DO CDIGO EAN-13:

510017

Alteraes nestas dimenses so permitidas, atravs de tabelas de converso, que no publicamos neste trabalho, pois, fogem ao assunto do mesmo.

LINGUAGEM DE PROGRAMAO DELPHI - Prof. Alberto Cezar de Carvalho Pgina 4

6. REPRESENTANDO OS NMEROS EM BARRAS:


Cada algarismo, dependendo da sua posio, ter sua representao definida de acordo com a tabela a seguir:
Algarismo Tabela A Tabela B Tabela C

0 1 2 3 4 5 6 7 8 9

0001101 0011001 0010011 0111101 0100011 0110001 0101111 0111011 0110111 0001011

0100111 0110011 0011011 0100001 0011101 0111001 0000101 0010001 0001001 0010111

1110010 1100110 1101100 1000010 1011100 1001110 1010000 1000100 1001000 1110100

Tabela 1

A posio 1 indicar a seqncia de tabelas A ou B para os algarismos das posies de 2 a 7:


1 algarismo Tabela do 2 algarismo Tabela do 3 algarismo Tabela do 4 algarismo Tabela do 5 algarismo Tabela do 6 algarismo Tabela do 7 algarismo

0 1 2 3 4 5 6 7 8 9

A A A A A A A A A A

A A A A B B B B B B

A B B B A B B A A B

A A B B A A B B B A

A B A B B A A A B B

A B B A B B A B A A

Tabela 2

A tabela C utilizada para os algarismos localizados nas posies 8 a 13. As barras do cdigo EAN-13, ainda tm alguns cdigos binrios adicionais. Abaixo, descreveremos toda a sequncia de binrios em um cdigo de barras: Margem de silncio (vazia, sem barras) Caractere auxiliar de guarda: 101 Seis caracteres utilizando a tabela A ou B, de acordo com o primeiro caractere. No nosso exemplo, o primeiro caractere 7 e portanto, consultando a tabela 2 verificamos que a seqncia para este algarismo : A B A B A B. Ento pela tabela 1 temos a seguinte sequncia de binrios:
8 tabela A 9 tabela B 9 tabela A 1 tabela B 6 tabela A 8 tabela B

guarda

101 0110111 0010111 0001011 0100111 0101111 0001001

LINGUAGEM DE PROGRAMAO DELPHI - Prof. Alberto Cezar de Carvalho Pgina 5

Caractere auxiliar central: 01010

101011011100101110001011010011101011110001001 01010
Seis caracteres utilizando a tabela C da tabela 1:
5 1 0 0 1 7

1001110 1100110 1110010 1110010 1100110 1000100 Um caractere auxiliar de guarda: 101
10101101110010111000101101001110101111000100101010100111011001101000100

101

Margem de silncio final. Voc pde verificar que o primeiro algarismo no possui barras, ele representado pela seqncia das tabelas utilizadas, de acordo com a tabela 2.

A seguir, apresentamos algumas rotinas que podem ser includas em um programa que desenha os cdigos de barra atravs de um objeto Canvas dentro de um objeto Image. Sugiro que acrescente ao formulrio um objeto Edit, onde sero digitados os 12 primeiros algarismos do cdigo EAN-13, e o prprio programa se encarregar de determinar o dgito verificador. Em seguida, ser desenhado dentro do objeto Image o cdigo de barras correspondente:
Declarar globalmente as constantes a seguir, que guardam a tabela de caracteres: Const TabelaA: array[0..9] of string[7] = ('0001101', // '0011001', // '0010011', // '0111101', // '0100011', // '0110001', // '0101111', // '0111011', // '0110111', // '0001011');// TabelaB: array[0..9] of string[7] = ('0100111', // '0110011', // '0011011', // '0100001', // '0011101', // '0111001', // '0000101', // '0010001', // '0001001', // '0010111');//

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9

LINGUAGEM DE PROGRAMAO DELPHI - Prof. Alberto Cezar de Carvalho Pgina 6

TabelaC: array[0..9] of string[7] = ('1110010', // '1100110', // '1101100', // '1000010', // '1011100', // '1001110', // '1010000', // '1000100', // '1001000', // '1110100');//

0 1 2 3 4 5 6 7 8 9

TabelaPaises: array[0..9] of string[6] = ('AAAAAA', 'AABABB', 'AABBAB', 'AABBBA', 'ABAABB', 'ABBAAB', 'ABBBAA', 'ABABAB', 'ABABBA', 'ABBABA');

Agora sugerimos uma rotina que desenha realmente uma barra:

Procedure Barra(x,altura:byte); begin With Form1.Image1.Canvas do begin MoveTo(x,0); LineTo(x,ALTURA); end; end;

A rotina a seguir, auxilia na escolha de qual das tabelas iremos acessar:

Function Binario(t,n: byte): string; begin Case T of 1: Binario:= TabelaA[n]; 2: Binario:= TabelaB[n]; 3: Binario:= TabelaC[n]; end; end;

LINGUAGEM DE PROGRAMAO DELPHI - Prof. Alberto Cezar de Carvalho Pgina 7

A funo abaixo, nos mostra como podemos compor o nmero binrio correspondente aos 13 algarismos do cdigo de barras:
Function Codigo(c: string): string; Var aux: string; i: byte; begin Aux:= 101; Pais:= Tabelapaises[strtoint(c[1])]; For i:= 2 to 7 do begin If Pais[i-1] = A then Aux:=Aux+Binario(1,StrToInt(c[i])) else Aux:= Aux+Binario(2,StrToInt(c[i])); end; Aux:= Aux + 01010; For i:= 8 to 13 do Aux:= Aux + Binario(3,StrToInt(c[i])); Codigo:= Aux + 101; end;

A rotina abaixo, a que comanda o desenho de todas as barras, inclusive detecta aquelas que devero ter uma altura maior do que as outras:
Procedure Desenha_Barra(cod: string); var i: byte; begin For i:= 1 to length(cod) do begin If cod[i] = '1' then If i in [1..3,46..50,93..95] then Barra(15 + i,95) else Barra(15 + i,90); end; end;

A funo abaixo, faz o clculo do dgito verificador:


Function digito_verificador(n: string): string; var i: byte; s, x: integer; begin S:= 0; for i:= 1 to 12 do begin If odd(i) then s:= s + StrToInt(n[i]) else s:= s + StrToInt(n[i]) * 3; end; x:= 0; while (x < s) do inc(x,10); digito_verificador:= IntToStr(x-s); end;

LINGUAGEM DE PROGRAMAO DELPHI - Prof. Alberto Cezar de Carvalho Pgina 8

Para montar o programa faa: 1) Permita ao usurio montar o nmero do cdigo utilizando um objeto Edit por exemplo. O nmero composto pelas seguintes partes: a) o cdigo do Pas b) nmero da empresa c) nmero do produto 2) De posse deste nmero chame a rotina "Digito_Verificador", passando a esta funo o nmero digitado, como parmetro. 3) Acrescente o dgito verificador ao final do nmero que havia sido digitado (item 1). 4) Passe funo "Codigo" o nmero obtido no item 3, como o parmetro da mesma. 5) O valor retornado da funo codigo (item 4) ser passado como parmetro da rotina "Desenha_Barra", para que a mesma comande o desenho de todas as barras. 6) Pronto. O cdigo de barras ser desenhado no objeto Canvas do objeto Image1.

Tente fazer, importante voc se acostumar encontrar e resolver os problemas de programao !!!

Você também pode gostar