Barcodes Filtern

Scripting
Antworten
Benutzeravatar
Dennis Balzuweit
Administrator
Administrator
Beiträge: 3399
Registriert: Freitag 12. Oktober 2007, 23:37
Firma: CTO Balzuweit GmbH
Wohnort: Stuttgart
Kontaktdaten:

Samstag 13. Oktober 2007, 02:25

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;
// ====================================================================
Benutzeravatar
Dennis Balzuweit
Administrator
Administrator
Beiträge: 3399
Registriert: Freitag 12. Oktober 2007, 23:37
Firma: CTO Balzuweit GmbH
Wohnort: Stuttgart
Kontaktdaten:

Sonntag 14. Oktober 2007, 18:12

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;

// ====================================================================
In dringenden Fällen wenden Sie sich bitte an Ihren zuständigen Partner-Support.

CLARC Website
CLARC Online-Help
CLARC Merchandising Shop
Benutzeravatar
Dennis Balzuweit
Administrator
Administrator
Beiträge: 3399
Registriert: Freitag 12. Oktober 2007, 23:37
Firma: CTO Balzuweit GmbH
Wohnort: Stuttgart
Kontaktdaten:

Donnerstag 24. November 2011, 14:31

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;
In dringenden Fällen wenden Sie sich bitte an Ihren zuständigen Partner-Support.

CLARC Website
CLARC Online-Help
CLARC Merchandising Shop
Antworten