Seite 1 von 1

Barcodes Filtern

Verfasst: Samstag 13. Oktober 2007, 02:25
von Dennis Balzuweit
Um Barcodes bei der Erkennung zu Filtern, also unerwünschte Barcodes zu auszufiltern, kann ein Script auf die Recognitionengine gelegt werden.
Hier ein Beispiel inkl. der Modulo 10 Prüfung von 2of5 Barcodes.

Dieser Filter beinhaltet folgendes:
  • 1. Prüfsummen Check (bei 2of5 Barcodes)
    2. Max. und Min. Wert des Barcodes (einstellbar über BcLowVal und BcHighVal)
    3. Längenprüfung
    4. Zudem eine Prüfung auf Barcodewiederholungen

Code: Alles auswählen

// ====================================================================
// Barcodeprüfung
// 2 of 5 interleaved (Modulo 10)
// ====================================================================
function CheckBarcode(Barcode) : Boolean;
begin
  try
    Summe    := 0;
    BcChkSum := strtoint(copy(Barcode,length(Barcode),1));
    Barcode  := copy(Barcode,1,length(Barcode)-1);

    for i:=1 to 7 do
    begin
      if i mod 2 = 0
        then Summe := Summe + strtoint(Barcode[i])
        else Summe := Summe + (strtoint(Barcode[i]) * 3);
    end;

    Checksum := 10 - (Summe Mod 10);
    if Checksum >= 10 then Checksum := 0;

    if CheckSum = BcChkSum
      then Result := true
      else Result := false;
  except
    Result := false;
  end;
end;
// ====================================================================
begin                                                 
  if RecoResult > '' then
  begin
    BcLowVal   := 0;
    BcHighVal  := 13999999;
    BcStr      := RecoResult;
    RecoResult := '';
    LfCr       := chr($0d) + chr($0a);
    BcStr      := Replace(BcStr,LfCr,chr($0a));
    BCStr      := trim(Replace(BCStr,chr($0a),LfCr)) + LfCr;

    while pos(LfCr,BcStr) > 0 do
    begin
      Barcode := trim(copy(BcStr,1,pos(LfCr,BcStr)-1));
      delete(BcStr,1,pos(LfCr,BcStr)+1);

      if length(Barcode) = 8 then
      begin
        try
          BcInt := strtoint(Barcode);
          if (BcInt >= BcLowVal) and (BcInt <= BcHighVal) then
          begin
            if (CheckBarcode(Barcode) = true) then
            begin
              if (LastRecoResult <> Barcode)
                then RecoResult := Barcode;
              exit;
            end;
          end;
        except
        end;
      end;
    end;
  end;
end;
// ====================================================================

Barcodes Filtern die 2.

Verfasst: Sonntag 14. Oktober 2007, 18:12
von Dennis Balzuweit
Hier noch ein weiteres Script zum Filtern von Barcodes bei der Erkennung.
In diesm Fall mit unterschiedlichen Nummernkreisen.

Code: Alles auswählen

// ====================================================================
// Barcodeprüfung
// ====================================================================
if RecoResult > '' then
begin
  BcStr      := RecoResult;
  RecoResult := '';
  LfCr       := chr($0d) + chr($0a);
  BcStr      := Replace(BcStr,LfCr,chr($0a));
  BCStr      := trim(Replace(BCStr,chr($0a),LfCr)) + LfCr;

  while pos(LfCr,BcStr) > 0 do
  begin
    Barcode := trim(copy(BcStr,1,pos(LfCr,BcStr)-1));
    delete(BcStr,1,pos(LfCr,BcStr)+1);

    if length(Barcode) = 10 then
    begin
      try
        BcInt := strtoint(copy(Barcode,1,5));

        if ((BcInt >= 99000) and (BcInt <= 99999)) or
           ((BcInt >= 88000) and (BcInt <= 88999)) or
           ((BcInt >= 77000) and (BcInt <= 77999)) or       
           ((BcInt >= 66000) and (BcInt <= 66999)) then   
        begin
          if (LastRecoResult <> Barcode)
            then RecoResult := Barcode;
          exit;
        end;
      except
      end;
    end;
  end;
end;

// ====================================================================

Re: Barcodes Filtern

Verfasst: Donnerstag 24. November 2011, 14:31
von Dennis Balzuweit
Hier ein Beispiel um einen best. Präfix zu prüfen:

Code: Alles auswählen

if RecoResult > '' then
begin
  crlf       := chr($0d) + chr($0a);
  BcStr      := RecoResult + crlf; 
  RecoResult := '';

  while pos(crlf,BcStr) > 0 do  
  begin
    Barcode := trim(copy(BcStr,1,pos(crlf,BcStr)-1));
    Prefix  := copy(Barcode,1,4);
    delete(BcStr,1,pos(crlf,BcStr)+1);                                                     
                               
    if Prefix = 'ABCD' then    
    begin
      RecoResult := Barcode;
    end;
  end;
end;