我们去超市购物时,收银员只需扫描一下商品条码,屏幕上即出现
该商品名称,我想软件应该是只读取了商品条形码的厂家标识码。

解决方案 »

  1.   

    (*校验函数用与13位 和8位*)
    function TbarcodesFrm.CodeCheck(BarCode:String;CodeLast: Integer): boolean;
    var
      Odd,Even,j,X:Integer;
    begin
     if (Length(BarCode)=8) or (Length(BarCode)=13) then
      begin
       Odd := 0;
       Even := 0;
       if Length(BarCode)=13 then
       begin
        for j := 1 to 6 do
        begin
          Odd := Odd + StrToInt(Copy(BarCode, 2 * j - 1, 1));
          Even := Even + StrToInt(Copy(BarCode, 2 * j, 1));
        end;
       end
       else
       begin
        for j := 1 to 3 do
         begin
          Odd := Odd + StrToInt(Copy(BarCode, 2 * j - 1, 1));
          Even := Even + StrToInt(Copy(BarCode, 2 * j, 1));
         end;
         Odd := Odd + StrToInt(Copy(BarCode,7, 1));
       end;
      //产生校验位X
       X:=10 - (Odd + 3 * Even) mod 10;
       Result:=(X=CodeLast);
       end
       else
       begin
        Result:=False;
       end;
    end;
    ********************
    procedure TbarcodesFrm.MFDataSetCODE_IDChange(Sender: TField);
    var
      BarCode:String;
      CodeLast:Integer;
    begin
      if not Sender.IsNull then
      begin
        BarCode:=Sender.AsString;
        CodeLast:=StrToInt(Copy(BarCode,Length(BarCode),1));
        if (not CodeCheck(Sender.AsString,CodeLast)) then
         begin
           MessageDlg('条码输入错误,请重新输入.',mtWarning,[mbOk],0);
    //     Sender.Clear;
           Exit;
         end;
      end;
    end;