| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- unit uUserLogin;
- interface
- uses
- SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
- QDialogs, QStdCtrls, QButtons, QExtCtrls, Libc, uPublic, QMenus, SQLite3, SQLiteTable3;
- type
- TfrmUserLogin = class(TForm)
- MainMenu1: TMainMenu;
- N11: TMenuItem;
- N21: TMenuItem;
- N31: TMenuItem;
- Edit1: TEdit;
- Label3: TLabel;
- BitBtn1: TBitBtn;
- BitBtn2: TBitBtn;
- Label4: TLabel;
- Timer1: TTimer;
- procedure Edit1KeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure BitBtn1Click(Sender: TObject);
- procedure BitBtn2Click(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure CRC_CPCC(var pucData: TResultByteArray; nLen: integer;var pCRC: string);
- procedure CALC_CODE();
- procedure Timer1Timer(Sender: TObject);
- procedure N21Click(Sender: TObject);
- procedure N31Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- frmUserLogin: TfrmUserLogin;
- ToChange : Integer;
- lastDate : string;
- fStream : TFileStream;
- userDB : TSQLiteDatabase;
- userTB : TSQLiteTable;
- implementation
- uses DESCrypt, uEnCode;
- {$R *.xfm}
- procedure TfrmUserLogin.Edit1KeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- begin
- if (key = 4100) or (key = 4101) then
- BitBtn1.Click;
- if key = 4096 then
- BitBtn2.Click;
- end;
- procedure TfrmUserLogin.BitBtn1Click(Sender: TObject);
- var
- str : string;
- buffer : array[1..100] of char;
- begin
- //fStream := TFILESTREAM.Create('code.dat',fmcreate);
- {
- fStream := TFILESTREAM.Create('code.dat',fmOpenReadWrite);
- fStream.Position := 0;
- fStream.Read(buffer,fStream.Size);
- if fStream.size = 0 then
- begin
- str := '';
- end
- else
- begin
- str := StrPas(@buffer);
- end;
- FreeAndNil(fStream);
- }
- userDB := TSQLiteDatabase.Create(AnsiToUTF8(_GetDBPath + 'code.db'));
- userTB := userDB.GetTable('select password from user where name = 1001 ');
- if userTB.RowCount = 0 then
- begin
- str := '';
- end
- else
- begin
- str := userTB.FieldByName['password'];
- end;
- if (edit1.Text = str) and (str <> '') then
- begin
- //Self.Close;
- //FrmEnCode := TFrmEnCode.Create(nil);
- //FrmEnCode.ShowModal;
- bitbtn1.Visible := FALSE;
- edit1.ReadOnly := TRUE;
- edit1.echomode := emNormal;
- label3.caption := '随机密码:';
- label4.visible := FALSE;
- bitbtn2.caption := '退出';
- mainmenu1.items.Items[0].Visible := TRUE;
- ToChange := 0;
- CALC_CODE;
-
- timer1.Enabled := TRUE;
- end
- else
- begin
- if bitbtn1.visible = TRUE then
- begin
- _MsgError('密码错误!');
- edit1.setfocus;
- exit;
- end;
- end;
- end;
- procedure TfrmUserLogin.BitBtn2Click(Sender: TObject);
- begin
- application.Terminate;
- exit;
- end;
- procedure TfrmUserLogin.FormCreate(Sender: TObject);
- begin
- mainmenu1.items.Items[0].Visible := FALSE;
- frmUserLogin.Timer1.Enabled := FALSE;
- edit1.SetFocus;
- end;
- procedure TfrmUserLogin.CRC_CPCC(var pucData: TResultByteArray; nLen: integer;
- var pCRC: string);
- var
- CRC16Lo, CRC16Hi, CH, CL, SaveHi, SaveLo, i, j: byte;
- begin
- CRC16Lo := 0; // pCRC-(pCRC div 256)*256;
- CRC16Hi := 0; //(pCRC div 256);
- ch := $A0;
- cl := $01;
- for i := 0 to nLen - 1 do
- begin
- CRC16Lo := CRC16Lo xor (pucData[i]);
- for j := 0 to 7 do
- begin
- SaveHi := CRC16Hi;
- SaveLo := CRC16Lo;
- CRC16Hi := CRC16Hi shr 1;
- CRC16Lo := CRC16Lo shr 1;
- if (SaveHi and $01) = $01 then
- CRC16Lo := CRC16Lo or $80;
- if (SaveLo and $01) = $01 then
- begin
- CRC16Hi := CRC16Hi xor CH;
- CRC16Lo := CRC16Lo xor CL;
- end;
- end;
- end;
- pCRC := IntToHex(CRC16hi, 2) + IntToHex(CRC16Lo, 2);
- end;
- procedure TfrmUserLogin.CALC_CODE();
- var
- AR: TResultByteArray;
- CRC: string;
- nCode: INTEGER;
- nTmp: INTEGER;
- _code: string;
- date: string;
- i: integer;
- C: array[1..4] of INTEGER;
- begin
- SetLength(ar, 10);
- ar[0] := $BD;
- ar[1] := $6E;
- ar[2] := $3F;
- ar[3] := $91;
- ar[4] := $4C;
- ar[5] := $2A;
- date := formatdatetime('yyyyMMdd', now);
- lastDate := date;
- ar[6] := StrToInt('$' + copy(date, 1, 2));
- ar[7] := StrToInt('$' + copy(date, 3, 2));
- ar[8] := StrToInt('$' + copy(date, 5, 2));
- ar[9] := StrToInt('$' + copy(date, 7, 2));
- CRC_CPCC(ar, length(ar), CRC);
- nTmp := StrToInt(copy(date, 8, 1));
- nTmp := nTmp mod 2;
- for i := 1 to 4 do
- begin
- c[i] := StrToInt('$' + copy(CRC, i, 1));
- if c[i] > 9 then
- begin
- if nTmp = 0 then
- begin
- c[i] := c[i] - 6;
- end
- else
- begin
- c[i] := c[i] - 9;
- end;
- end;
- end;
- CRC := IntToStr(c[1])
- +IntToStr(c[2])
- +IntToStr(c[3])
- +IntToStr(c[4]);
- edit1.Text := CRC;
- ToChange := 0;
- end;
- procedure TfrmUserLogin.Timer1Timer(Sender: TObject);
- var
- date : string;
- begin
- date := formatdatetime('yyyyMMdd', now);
- if lastDate <> date then
- begin
- calc_code;
- end;
- {
- if (ToChange = 0) and
- (date > '235500') and (date < '235959') then
- begin
- ToChange := 1;
- end;
- if (ToChange = 1) and
- (date > '000000') and (date < '000500') then
- begin
- calc_code;
- end;
- }
- end;
- procedure TfrmUserLogin.N21Click(Sender: TObject);
- begin
- Application.CreateForm(TFrmEnCode, FrmEnCode);
- FrmEnCode.ShowModal;
- end;
- procedure TfrmUserLogin.N31Click(Sender: TObject);
- begin
- application.Terminate;
- exit;
- end;
- end.
- .
- .
|