动易2005 算号器的源代码

鬼仔注:郁闷,先发了 2006的 ,才发了2005的。

来源:soweb的专栏

这个代码网上也有别的版本公开过,我这个版本只少量流传,当然是我自己跟踪出来的,2006早出来了,先公布2005的代码,等2007出来再公开2006的代码。


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,MD5,BASE64,CLIPBRD, Mask;

type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Label5: TLabel;
ComboBox1: TComboBox;
ComboBox2: TComboBox;
Label6: TLabel;
Label7: TLabel;
Edit3: TEdit;
Memo1: TMemo;
Button1: TButton;
MaskEdit1: TMaskEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure GenerateSN;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
GenerateSN;
end;

procedure TForm1.GenerateSN;
const
sBase='123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+=';
var
sDomain,sRandom1,sRandom2,sMD5,sSN,sYear :string;
cVersion,cDatabase:Char;
iRandom,i:integer;
sSN1 : string;
sSN2 : string;
begin
sDomain:=Trim(Edit1.Text) ;
sRandom1:=Trim(Edit2.Text) ;
iRandom := strToint(sRandom1);
Memo1.Lines.Clear ;

{ 加上版本号 }
case Combobox1.ItemIndex of
0: cVersion :='0';
1: cVersion :='1';
2: cVersion :='2';
3: cVersion :='3';
4: cVersion :='4';
5: cVersion :='5';
6: cVersion :='9';
end;

{ 加上数据库类型 }
case Combobox2.ItemIndex of
0: cDatabase :='a';
1: cDatabase :='S';
end;

{ 随机数 }
sRandom2:= cVersion + cDatabase + Trim(Edit3.Text) ;

{ 计算MD5的值 }
sMD5:=cMD5.MD5(sDomain+sRandom2,true );
Memo1.Lines.Add(sMD5);

{ 转换成大写 }
sMD5:=UpperCase(sMD5);

{ 加上年限 }
//sYear:='2MjAxNS00LTE5E933D59'; { 10年 }
//sYear:='2MjA4Ni0xLTIx3426FB1'; { 70年 }
sYear:=cBase64.StrToBase64(StringReplace(Trim(MaskEdit1.Text),' ','',[rfReplaceAll]));
sYear:=intTostr(Length(sYear)-10)+sYear;
sSN1:=sMD5+sRandom2+sYear+'3426FB1';
Memo1.Lines.Add(sSN1);

{ 填充散列 }
SetLength(sSN2,1024);
Randomize;
for i:=1 to 1024 do
begin
sSN2[i]:=sBase[Random(63)+1];
end;

{ 填充随机因子 }
sSN2[121]:=sRandom1[1];

{ 填充加密信息 }
for i:=1 to 60 do
begin
sSN2[(iRandom+1)*i+121]:=sSN1[i];
end;

Memo1.Lines.Add('');
Memo1.Lines.Add(sSN2);

Clipboard.Astext := sSN2 + sSN2 + sSN2 + sSN2 ;

end;

end.

相关日志

发表评论