uEnCode.pas 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. unit uEnCode;
  2. interface
  3. uses
  4. SysUtils, libc, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
  5. QDialogs, QStdCtrls, SQLite3, SQLiteTable3, uPublic, QButtons, QExtCtrls,
  6. QMenus;
  7. type
  8. TFrmEnCode = class(TForm)
  9. BitBtn1: TBitBtn;
  10. Edit1: TEdit;
  11. Label1: TLabel;
  12. Label2: TLabel;
  13. Label3: TLabel;
  14. Edit2: TEdit;
  15. Edit3: TEdit;
  16. BitBtn2: TBitBtn;
  17. procedure Button2Click(Sender: TObject);
  18. procedure FormCreate(Sender: TObject);
  19. procedure CRC_CPCC(var pucData: TResultByteArray; nLen: integer;var pCRC: string);
  20. procedure CALC_CODE();
  21. procedure BitBtn1Click(Sender: TObject);
  22. procedure BitBtn2Click(Sender: TObject);
  23. procedure Edit1KeyDown(Sender: TObject; var Key: Word;
  24. Shift: TShiftState);
  25. procedure Edit2KeyDown(Sender: TObject; var Key: Word;
  26. Shift: TShiftState);
  27. procedure Edit3KeyDown(Sender: TObject; var Key: Word;
  28. Shift: TShiftState);
  29. private
  30. { Private declarations }
  31. public
  32. { Public declarations }
  33. end;
  34. var
  35. FrmEnCode: TFrmEnCode;
  36. fStream : TFILESTREAM;
  37. userDB : TSQLiteDatabase;
  38. userTB : TSQLiteTable;
  39. implementation
  40. uses DESCrypt;
  41. {$R *.xfm}
  42. procedure TFrmEnCode.Button2Click(Sender: TObject);
  43. begin
  44. close;
  45. end;
  46. procedure TFrmEnCode.FormCreate(Sender: TObject);
  47. begin
  48. edit1.SetFocus;
  49. end;
  50. procedure TFrmEnCode.CRC_CPCC(var pucData: TResultByteArray; nLen: integer;
  51. var pCRC: string);
  52. var
  53. CRC16Lo, CRC16Hi, CH, CL, SaveHi, SaveLo, i, j: byte;
  54. begin
  55. CRC16Lo := 0; // pCRC-(pCRC div 256)*256;
  56. CRC16Hi := 0; //(pCRC div 256);
  57. ch := $A0;
  58. cl := $01;
  59. for i := 0 to nLen - 1 do
  60. begin
  61. CRC16Lo := CRC16Lo xor (pucData[i]);
  62. for j := 0 to 7 do
  63. begin
  64. SaveHi := CRC16Hi;
  65. SaveLo := CRC16Lo;
  66. CRC16Hi := CRC16Hi shr 1;
  67. CRC16Lo := CRC16Lo shr 1;
  68. if (SaveHi and $01) = $01 then
  69. CRC16Lo := CRC16Lo or $80;
  70. if (SaveLo and $01) = $01 then
  71. begin
  72. CRC16Hi := CRC16Hi xor CH;
  73. CRC16Lo := CRC16Lo xor CL;
  74. end;
  75. end;
  76. end;
  77. pCRC := IntToHex(CRC16hi, 2) + IntToHex(CRC16Lo, 2);
  78. end;
  79. procedure TFrmEnCode.CALC_CODE();
  80. var
  81. AR: TResultByteArray;
  82. CRC: string;
  83. nCode: INTEGER;
  84. nTmp: INTEGER;
  85. _code: string;
  86. date: string;
  87. i: integer;
  88. C: array[1..4] of INTEGER;
  89. begin
  90. SetLength(ar, 10);
  91. ar[0] := $BD;
  92. ar[1] := $6E;
  93. ar[2] := $3F;
  94. ar[3] := $91;
  95. ar[4] := $4C;
  96. ar[5] := $2A;
  97. date := formatdatetime('yyyyMMdd', now);
  98. ar[6] := StrToInt('$' + copy(date, 1, 2));
  99. ar[7] := StrToInt('$' + copy(date, 3, 2));
  100. ar[8] := StrToInt('$' + copy(date, 5, 2));
  101. ar[9] := StrToInt('$' + copy(date, 7, 2));
  102. CRC_CPCC(ar, length(ar), CRC);
  103. nTmp := StrToInt(copy(date, 8, 1));
  104. nTmp := nTmp mod 2;
  105. for i := 1 to 4 do
  106. begin
  107. c[i] := StrToInt('$' + copy(CRC, i, 1));
  108. if c[i] > 9 then
  109. begin
  110. if nTmp = 0 then
  111. begin
  112. c[i] := c[i] - 6;
  113. end
  114. else
  115. begin
  116. c[i] := c[i] - 9;
  117. end;
  118. end;
  119. end;
  120. CRC := IntToStr(c[1])
  121. +IntToStr(c[2])
  122. +IntToStr(c[3])
  123. +IntToStr(c[4]);
  124. edit1.Text := CRC;
  125. end;
  126. procedure TFrmEnCode.BitBtn1Click(Sender: TObject);
  127. var
  128. buffer : array[1..100] of char;
  129. str : string;
  130. begin
  131. {
  132. fStream := TFILESTREAM.Create('code.dat',fmOpenReadWrite);
  133. fStream.Position := 0;
  134. fStream.Read(buffer,fStream.Size);
  135. if fStream.size = 0 then
  136. begin
  137. str := '';
  138. end
  139. else
  140. begin
  141. str := StrPas(@buffer);
  142. end;
  143. FreeAndNil(fStream);
  144. }
  145. userDB := TSQLiteDatabase.Create(AnsiToUTF8(_GetDBPath + 'code.db'));
  146. userTB := userDB.GetTable('select password from user where name = 1001 ');
  147. if userTB.RowCount = 0 then
  148. begin
  149. str := '';
  150. end
  151. else
  152. begin
  153. str := userTB.FieldByName['password'];
  154. end;
  155. if (edit1.Text <> str) or (str = '') then
  156. begin
  157. _MsgError('密码错误!');
  158. exit;
  159. end
  160. else
  161. begin
  162. if (edit2.Text <> '') and (edit2.Text = edit3.Text) then
  163. begin
  164. {
  165. fStream := TFILESTREAM.Create('code.dat',fmOpenReadWrite);
  166. fStream.Position := 0;
  167. str "= edit2.Text;
  168. strPCopy(@buffer,str);
  169. fStream.Write(buffer,length(str));
  170. }
  171. userDB.ExecSQL('update user set password = ''' + edit2.Text + ''' where name = 1001');
  172. _MsgError('密码修改成功');
  173. close;
  174. end
  175. else
  176. begin
  177. if edit2.Text = '' then
  178. begin
  179. _MsgError('新密码不能为空');
  180. end
  181. else
  182. begin
  183. _MsgError('新密码输入不一致');
  184. end;
  185. exit;
  186. end;
  187. end;
  188. end;
  189. procedure TFrmEnCode.BitBtn2Click(Sender: TObject);
  190. begin
  191. close;
  192. end;
  193. procedure TFrmEnCode.Edit1KeyDown(Sender: TObject; var Key: Word;
  194. Shift: TShiftState);
  195. begin
  196. if (key = 4100) or (key = 4101) then
  197. BitBtn1.Click;
  198. if key = 4096 then
  199. BitBtn2.Click;
  200. end;
  201. procedure TFrmEnCode.Edit2KeyDown(Sender: TObject; var Key: Word;
  202. Shift: TShiftState);
  203. begin
  204. if (key = 4100) or (key = 4101) then
  205. BitBtn1.Click;
  206. if key = 4096 then
  207. BitBtn2.Click;
  208. end;
  209. procedure TFrmEnCode.Edit3KeyDown(Sender: TObject; var Key: Word;
  210. Shift: TShiftState);
  211. begin
  212. if (key = 4100) or (key = 4101) then
  213. BitBtn1.Click;
  214. if key = 4096 then
  215. BitBtn2.Click;
  216. end;
  217. end.
  218. .