Buscar

Valida Código de Barras tipo Conta (funciona)

Código

Bom pessoa, fiz um sistema completo de recebimento de contas, água, energia e Telefonia! e resolvi contribuir com uma humilde dica para quem necessitar...
Percebi que existem 2 tipos de código de barras um que chamo de "conta" que são aqueles códigos de barras com 4 blocos de 12 caracteres cada, nesse caso o dígito verificador fica sempre como o ultimo dígito de cada bloco, é através desse dígito que validamos o código completo.
Vamos lá:

Antes de mais nada inclua um <MaskEdit> coloque a seguinte mascara=  '999999999999  999999999999  999999999999  999999999999;1;_', Inclua um botão para utilizarmos como disparador da validação, claro que a validação pode ser utilizada em qualquer outro evento que desejar....

Declare a seguinte Função:
public
function CalcDigM10(Campo: String): String;

Corpo da Função:
function TForm1.CalcDigM10(Campo: String): String;
 var
   nl,
   nMult,
   nSoma,
   nMin,
   nMax,
   nResto,
   nDig,
   nParc : integer ;
begin
   nMin := 1;
   nMax := 2;
   nMult := nMax;
   nSoma := 0;
   nl := length(Campo);
   while nl > 0 do
   begin
    nParc := StrToInt( copy(Campo,nl,1) ) * nMult;
    if nParc > 9 then nParc := nParc - 9 ;
    nSoma := nSoma + nParc ;
    nMult := nMult -1;
    nl := nl -1 ;
    if nMult < nMin then nMult := nMax;
   end;
   nResto := nSoma mod 10 ;
   nDig := 10 - nResto;
   if nDig > 9 then nDig := 0;
   Result := IntToStr(nDig) ;
end;

Depois é só incluir no onclick do botão o seguinte código:

procedure TForm1.Button1Click(Sender: TObject);
var bloco1,digi1_func,
    bloco2,digi2_func,
    bloco3,digi3_func,
    bloco4,digi4_func,
    NumBarra :String;
begin
      //Captura os 4 blocos de 12 posições do campo MaskEdit!
      bloco1 := copy(MaskEdit.Text,1,12);
      bloco2 := copy(MaskEdit.Text,15,12);
      bloco3 := copy(MaskEdit.Text,29,12);
      bloco4 := copy(MaskEdit.Text,43,12);

      //Código de barras completo!
      NumBarra := bloco1+bloco2+bloco3+bloco4;

      digi1_func := copy(MaskEdit.Text,1,11);
      digi1_func := digi1_func + CalcDigM10(digi1_func);

      digi2_func := copy(MaskEdit.Text,15,11);
      digi2_func := digi2_func + CalcDigM10(digi2_func);

      digi3_func := copy(MaskEdit.Text,29,11);
      digi3_func := digi3_func + CalcDigM10(digi3_func);

      digi4_func := copy(MaskEdit.Text,43,11);
      digi4_func := digi4_func + CalcDigM10(digi4_func);

      if (digi1_func <> bloco1) or (digi2_func <> bloco2) or (digi3_func <> bloco3) or (digi4_func <> bloco4) then
      begin
         ShowMessage('Código de barras inválido');
         MaskEdit.Clear;
         Abort;
      end;

end;

E pronto, basta usar a inteligência para melhorar da formas que lhe convém....

na proxima mostro como validar o outro tipo de código de barras (Título) que é : '9999999999  99999999999  99999999999  9  99999999999999;1;_'

Ass: Ednaldo Avelino
Analista de Sistemas

 

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Forms
Adicionada dia: 15/09/10
Por: Ednaldo Avelino Da Silva Júnior
Visualizada: 8733 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009