unit uEnCode; interface uses SysUtils, libc, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms, QDialogs, QStdCtrls, SQLite3, SQLiteTable3, uPublic, QButtons, QExtCtrls, QMenus; type TFrmEnCode = class(TForm) BitBtn1: TBitBtn; Edit1: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Edit2: TEdit; Edit3: TEdit; BitBtn2: TBitBtn; procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure CRC_CPCC(var pucData: TResultByteArray; nLen: integer;var pCRC: string); procedure CALC_CODE(); procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Edit2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Edit3KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private declarations } public { Public declarations } end; var FrmEnCode: TFrmEnCode; fStream : TFILESTREAM; userDB : TSQLiteDatabase; userTB : TSQLiteTable; implementation uses uDM, DESCrypt; {$R *.xfm} procedure TFrmEnCode.Button2Click(Sender: TObject); begin close; end; procedure TFrmEnCode.FormCreate(Sender: TObject); begin edit1.SetFocus; end; procedure TFrmEnCode.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 TFrmEnCode.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); 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; end; procedure TFrmEnCode.BitBtn1Click(Sender: TObject); var buffer : array[1..100] of char; str : string; begin { 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) or (str = '') then begin _MsgError('密码错误!'); exit; end else begin if (edit2.Text <> '') and (edit2.Text = edit3.Text) then begin { fStream := TFILESTREAM.Create('code.dat',fmOpenReadWrite); fStream.Position := 0; str "= edit2.Text; strPCopy(@buffer,str); fStream.Write(buffer,length(str)); } userDB.ExecSQL('update user set password = ''' + edit2.Text + ''' where name = 1001'); _MsgError('密码修改成功'); close; end else begin if edit2.Text = '' then begin _MsgError('新密码不能为空'); end else begin _MsgError('新密码输入不一致'); end; exit; end; end; end; procedure TFrmEnCode.BitBtn2Click(Sender: TObject); begin close; end; procedure TFrmEnCode.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 TFrmEnCode.Edit2KeyDown(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 TFrmEnCode.Edit3KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (key = 4100) or (key = 4101) then BitBtn1.Click; if key = 4096 then BitBtn2.Click; end; end. .