⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 machineinterface.pas

📁 电子学生证源码 电子学生证源码
💻 PAS
📖 第 1 页 / 共 3 页
字号:

        {
        st := rf_load_key_hex(ICDev,LOAD_PASSWD_MODE,secnr,PChar(LOAD_KEY));

        if st <> 0 then
        begin
                 showmessage('发卡机连接错!请检查通讯线是否正确连接?')
//                frmMsgBox.MessageBox('加载密码出错!','',MB_OK or MB_ICONWARNING);
//                rf_halt(ICDev);
                rf_exit(ICDev);
                exit;
        end;
        }
        st := rf_card(ICDev,1,@snr);
        if st <> 0 then
        begin
           //    showmessage('发卡机上未发现卡片')
//                frmMsgBox.MessageBox('发卡机上未发现考勤卡,请先放卡!','',MB_OK or MB_ICONWARNING);
//                rf_halt(ICDev);
                rf_exit(ICDev);
                exit;
        end;
        st:=rf_authentication(icdev,0,secnr);
        if st <> 0 then
        begin
           //    showmessage('密码错误')
//               frmMsgBox.MessageBox('密码错误!','',MB_OK or MB_ICONWARNING);
//                rf_halt(ICDev);
                rf_exit(ICDev);
                exit;
        end;

        iCardNo := StrToInt(cfCard.CardNo);

        S := IntToHex(iCardNo,4);
        S := S + Copy(cfCard.UnitPasswd,1,4);
        S := S + IntToHex(cfCard.CardType,2);
        S := S + IntToHex(cfCard.CardFlag,2);
        S := S + '00000000000000000000000000000000';
        S := Copy(S,1,32);

        st := rf_write_hex(ICDev,secnr*4+2,PChar(S));
        if st <> 0 then
        begin
         //      showmessage('写卡发生错误')
//                frmMsgBox.MessageBox('写卡发生错误!','',MB_OK or MB_ICONWARNING);
//                rf_halt(ICDev);
                rf_exit(ICDev);
                exit;
        end;

        st := rf_read_hex(ICDev,secnr*4+2,@Buf);
        if st <> 0 then
        begin
          //      showmessage('校验写入数据发生错误')
//                frmMsgBox.MessageBox('校验写入数据发生错误!','',MB_OK or MB_ICONWARNING);
//                rf_halt(ICDev);
                rf_exit(ICDev);
                exit;
        end;
        strTemp := Buf;
        if Trim(S) <> Trim(strTemp) then
        begin
        //        showmessage('校验写入数据发生错误')
//                frmMsgBox.MessageBox('校验数据发生错误!','',MB_OK or MB_ICONWARNING);
//                rf_halt(ICDev);
                rf_exit(ICDev);
                exit;
        end;

          S := IntToHex(cfCard.UsedCount,4);

        Byte1OfDate := Byte((cfCard.UsedDay shl 3) and $1F) + Byte((cfCard.UsedHour shr 2) and $07);
        Byte2OfDate := Byte( ((cfCard.UsedHour shl 6) and $C0)) + Byte(cfCard.UsedMin and $3F);

        S := S + IntToHex( Integer( Byte1OfDate),2) + IntToHex(Integer(Byte2OfDate),2);

        strTemp := FloatToStr(cfCard.Money * 100);
        strTemp := '000000' + strTemp;
        strTemp := Copy(strTemp,Length(strTemp) - 5,6);
        S := S + strTemp;
        S := S + '00000000000000000000000000000000';
        S := Copy(S,1,32);

        st := rf_write_hex(ICDev,secnr*4+1,PChar(S));
        if st <> 0 then
        begin
         //       showmessage('写卡发生错误')
//                frmMsgBox.MessageBox('写卡发生错误!','',MB_OK or MB_ICONWARNING);
//                rf_halt(ICDev);
                rf_exit(ICDev);
                exit;
        end;

        st := rf_read_hex(ICDev,secnr*4+1,@Buf);
        if st <> 0 then
        begin
        //        showmessage('校验写入数据发生错误')
//                frmMsgBox.MessageBox('校验写入数据发生错误!','',MB_OK or MB_ICONWARNING);
//                rf_halt(ICDev);
                rf_exit(ICDev);
                exit;
        end;
        strTemp := Buf;
        if Trim(S) <> Trim(strTemp) then
        begin
        //        showmessage('校验写入数据发生错误')
//                frmMsgBox.MessageBox('校验数据发生错误!','',MB_OK or MB_ICONWARNING);
//                rf_halt(ICDev);
                rf_exit(ICDev);
                exit;
        end;

        rf_beep(ICDev,20);

//        rf_halt(ICDev);
        rf_exit(ICDev);

        Result := True;
end;
function Card_GetInfo(device  :String; secnr :integer;var cfcard : Tcard_Format) :Boolean;
var
        st :LongWord;
        snr : LongInt;
        Buf : array[0..15] of char;
        S :String;
        Year,Month,Day,Hour,Min:Word;       //使用时间
        ICdev: LongInt;
        Port :Integer;
begin
        Result := False;

        if Device = 'COM1' Then
                Port := 0
        else    Port := 1;

        ICDev := rf_init(Port,BAUD_RATE);     //串口1 波特率115200

        if ICDev <= 0 then
        begin
        //        showmessage('发卡机连接错误')
//                frmMsgBox.MessageBox('串口初始化出错!','',MB_OK or MB_ICONWARNING);
                exit;
        end;
        {
        st := rf_load_key_hex(ICDev,LOAD_PASSWD_MODE,0,PChar(LOAD_KEY));

        if st <> 0 then
        begin
               showmessage('发卡机连接错误')
//                frmMsgBox.MessageBox('加载密码出错!','',MB_OK or MB_ICONWARNING);
//                rf_halt(ICDev);
                rf_exit(ICDev);
                exit;
        end;
        }
        st := rf_card(ICDev,0,@snr);
        if st <> 0 then
        begin
        //       showmessage('发卡机上未发现卡片')
//                frmMsgBox.MessageBox('发卡机上未发现考勤卡,请先放卡!','',MB_OK or MB_ICONWARNING);
//                rf_halt(ICDev);
                rf_exit(ICDev);
                exit;
        end;
        st:=rf_authentication(icdev,0,secnr);
        if st <> 0 then
        begin
       //        showmessage('密码错误')
//                frmMsgBox.MessageBox('密码错误!','',MB_OK or MB_ICONWARNING);
//                rf_halt(ICDev);
                rf_exit(ICDev);
                exit;
        end;
        st := rf_read(ICDev,secnr*4+2,@Buf);
        if st <> 0 then
        begin
       //         showmessage('读卡出错')
              //  frmMsgBox.MessageBox('读卡信息出错!','',MB_OK or MB_ICONWARNING);
//                rf_halt(ICDev);
                rf_exit(ICDev);
                exit;
        end;
        //卡号
        cfcard.CardNo := '00000' + IntToStr((Integer(Buf[0]) shl 8 ) + Integer(Buf[1]));
        cfcard.CardNo := Copy(cfcard.CardNo,Length(cfcard.CardNo) - 4,5);

        //单位密码
        cfcard.UnitPasswd := IntToHex(Integer(Buf[2]),2) + IntToHex(Integer(Buf[3]),2);

        //卡类
        cfCard.CardType := Byte(Buf[4]);

        //卡标志
        cfCard.CardFlag := Byte(Buf[5]);


        st := rf_read(ICDev,secnr*4+1,@Buf);
        if st <> 0 then
        begin
      //         showmessage('读卡出错')
//               frmMsgBox.MessageBox('读卡信息出错!','',MB_OK or MB_ICONWARNING);
//                rf_halt(ICDev);
                rf_exit(ICDev);
                exit;
        end;
        //使用次数
        cfCard.UsedCount := (Integer(Buf[0]) shl 8) + Integer(Buf[1]);

        //卡余额
        S := IntToHex(Integer(Buf[4]),2) + IntToHex(Integer(Buf[5]),2) + '.' + IntToHex(Integer(Buf[6]),2);
        cfCard.Money := StrToFloat(S);

        //使用时间
        //日
        cfCard.UsedDay := (Integer(Buf[2]) shr 3) and $1f;
        //时
        cfCard.UsedHour:= ((Integer(Buf[2]) and $07) shl 2) + ((Integer(Buf[3]) and $C0) shr 6);
        //分
        cfCard.UsedMin := (Integer(Buf[3]) and $3F);

        rf_beep(ICDev,20);

//        rf_halt(ICDev);
        rf_exit(ICDev);
        Result := True;
end;
function Card_IncMoney(Device :String; secnr : integer;Money : Extended) : Boolean;
var
        cfcard : Tcard_Format;
begin
        Result := False;

        if( not Card_GetInfo(Device,secnr,cfcard) ) then  exit;

        cfcard.Money := cfcard.Money + Money;

        if( not Card_SendCard(Device,secnr,cfcard) ) then exit;

        Result := True;
end;
function Card_DecMoney(Device :String;secnr:integer; Money : Extended) : Boolean;
var
        cfcard : Tcard_Format;
begin
        Result := False;

        if( not Card_GetInfo(Device,secnr,cfcard) ) then  exit;

        if cfcard.Money > Money then
                cfcard.Money := cfcard.Money - Money
        else
                cfcard.Money := 0;

        if( not Card_SendCard(Device,secnr,cfcard) ) then exit;

        Result := True;
end;
function Card_ClearMoney(Device :String;secnr :integer) : Boolean;
var
        cfcard : Tcard_Format;
begin
        Result := False;

        if( not Card_GetInfo(Device,secnr,cfcard) ) then  exit;

        cfcard.Money := 0;

        if( not Card_SendCard(Device,secnr,cfcard) ) then exit;

        Result := True;
end;
function Card_GetCardPhyID(Device :String) : String;
var
        snr :longint;
        st :Smallint;
        ICdev: LongInt;
        Port :Integer;
begin
        Result := '';

        if Device = 'COM1' Then
                Port := 0
        else   if Device = 'COM2' Then
                Port := 1
               else   if Device = 'COM3' Then
                          Port := 2
                       else port := 3;

        ICDev := rf_init(Port,115200);     //串口1 波特率115200

        if ICDev < 0 then
        begin

         //      ShowMessage('串口初始化出错!');
//                showmessage('串口初始化出错') ;
 //               frmMsgBox.MessageBox('串口初始化出错!','',MB_OK or MB_ICONWARNING);
                exit;
        end;
        st := rf_card(ICDev,1,@snr);

        if st = 0 then
        begin
                Result := IntToHex(snr,8);
        end;

        rf_beep(ICDev,10);

     //   rf_halt(ICDev);
        rf_exit(ICDev);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -