Codigo de barras no Fortes

Delphi

28/04/2008

Ola pessoal
Desenvolvi um sistema utilizando o componente de codigo de barras
do fortes, mas acontece que nenhum leitor consegue ler
o código, o fornecedor do Leitor me perguntou qual a
simbologia que utilizo, ou qual a fonte estou utilizando
Eu não entendo muita coisa desse procedimento
de codigos de barras
O que poderia estar acontecendo?

Grato

Claudio


Claudiocjr

Claudiocjr

Curtidas 0

Respostas

Vitor Alcantara

Vitor Alcantara

28/04/2008

Caro amigo o código adotado para produtos é o padrão EAN13 e EAN8, geralmente os leitores ja vem habilitado pra ler tais códigos em sua configuração default. O código quem vem default nos componentes RlBarCode e RlDbBarCode é o ´bcCode2OF5Interleaved´ , troque ele na propriedade ´BarCodeType´ para bcEAN13 (Caso do código EAN13) ou bcEAN8 (Caso do EAN8).

Outra coisa nem todo código (pelo menos nos padrões EAN13 e EAN8) são lidos pelo leitor, pois o último digito (13º no caso do EAN13 e 8º no caso do EAN8) é um digito verificador que é calculado, ou seja caso esteja errado o leitor simplismente não ler o código.

rotina para calculo do digito verificador no caso do EAN13 :

function GeraEan13(codigo:string):String;
var
  dg:String;
  vlr,dv:integer;
begin
  Codigo := Copy(Codigo , 1,12);
  vlr := (StrToInt(copy(codigo,12,1)) + StrToInt(Copy(codigo,10,1))+
         StrToInt(copy(codigo,8,1)) +  StrToInt(Copy(codigo,6,1)) +
         StrToInt(Copy(Codigo,4,1)) + StrToInt(Copy(Codigo,2,1))) *3;
  vlr := vlr + StrToInt(copy(codigo,11,1)) + strToInt(copy(codigo,9,1))+
        StrToInt(copy(codigo,7,1)) + StrToInt(Copy(Codigo,5,1)) +
        StrToInt(Copy(codigo,3,1))+   StrToint(Copy(Codigo,1,1));
  Dg := Copy(IntToStr(vlr),length(inttostr(vlr)),1);
  dv := 10 - strtoInt(dg);

  if Dv = 10 then
  Dv :=  0;

  result := Codigo + intTostr(dv);

end;


Explicando o código.

Para se chegar ao digito verificador do código de barras padrão EAN13 você deve somar todos os núros impares e multiplicar por 3 , dai soma todo os números pares , o resultado das duas operações deve ser somado, dai é só diminuir de 10 o último digito obitido se der 10 (se for zero o último digito) o digito verificador é 0 (zero) caso contrário o digito verificador é a diferença obitida na operação.

Ex:

o código 100000000001

A soma de todo os números impares multiplicado por trez
1[b:31f9cb4095]0[/b:31f9cb4095]0[b:31f9cb4095]0[/b:31f9cb4095]0[b:31f9cb4095]0[/b:31f9cb4095]0[b:31f9cb4095]0[/b:31f9cb4095]0[b:31f9cb4095]0[/b:31f9cb4095]0[b:31f9cb4095]1[/b:31f9cb4095]

S1 = (0+0+0+0+0+1)*3 = 3

A soma de todo os números pares multiplicado por trez
[b:31f9cb4095]1[/b:31f9cb4095]0[b:31f9cb4095]0[/b:31f9cb4095]0[b:31f9cb4095]0[/b:31f9cb4095]0[b:31f9cb4095]0[/b:31f9cb4095]0[b:31f9cb4095]0[/b:31f9cb4095]0[b:31f9cb4095]0[/b:31f9cb4095]1

S2 = (1+0+0+0+0+0) = 1

O resultado seria das duas operações é somado

S1 + S2 = 3 + 1 = 4

Do resultado pega-se dez e subtrai o último digito obtido

R = 10 - Ultimo digito = 10 - 4 = 6

Pronto o digito verificador é seis, logo o código é
100000000001 + Dv ou 1000000000016

Caso se tenha nescessidade de obter outro tipo de código que não seja o padrão EAN13 sertifique-se se o leitor tem suporte ao mesmo (geralmente vem uma cartilha de configuração onde você pode habilitar ou desabilitar a leitura de certos tipos de códigos) e se existe a obrigação de calculo de digito verificador.


GOSTEI 0
Claudiocjr

Claudiocjr

28/04/2008

Primeiramente Obrigado pela Colaboração

Não sei se tem alguma configuração a ser feita
no componente, mas o que fiz, foi simplesmente
gerar um numero qualquer por exemplo 00128
atribui no caption do componente BarCode, mas os
Leitores não Lê

Grato

Claudio


GOSTEI 0
POSTAR