unitUnit1;
interface
uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
Dialogs,StdCtrls,MD5,BASE64,math,CLIPBRD,ExtCtrls,DateUtils;
type
TForm1=class(TForm)
Edit1:TEdit;
Button1:TButton;
Label1:TLabel;
GroupBox1:TGroupBox;
ComboBox1:TComboBox;
Label4:TLabel;
ComboBox2:TComboBox;
Label3:TLabel;
ComboBox3:TComboBox;
Label5:TLabel;
CheckBox1:TCheckBox;
CheckBox2:TCheckBox;
CheckBox3:TCheckBox;
CheckBox4:TCheckBox;
CheckBox5:TCheckBox;
RadioGroup1:TRadioGroup;
Image1:TImage;
Edit2:TEdit;
procedureButton1Click(Sender:TObject);
procedureFormCreate(Sender:TObject);
private
{Privatedeclarations}
ProcedureGenPE2006Key();
public
{Publicdeclarations}
end;
var
Form1:TForm1;
implementation
{$R*.dfm}
const
PublicKey=63169;
Modulus=43679;
FunctionCrypt(constpLngMessage,pLngKey:integer):Integer;
var
lLngMod,lLngResult,lLngIndex:integer;
begin
IfpLngKeyMod2=0Then
begin
lLngResult:=1;
ForlLngIndex:=1TopLngKeydiv2do
begin
lLngMod:=round(Power(pLngMessage,2))ModModulus;
//Modmayerroronkeygeneration
lLngResult:=(lLngMod*lLngResult)ModModulus
end;
end
Else
begin
lLngResult:=pLngMessage;
ForlLngIndex:=1TopLngKeydiv2do
begin
lLngMod:=round(Power(pLngMessage,2))ModModulus;
//Modmayerroronkeygeneration
lLngResult:=(lLngMod*lLngResult)ModModulus;
end;
End;
Result:=lLngResult;
End;
FunctionEncode(constpStrMessage:String):String;
var
lLngIndex,lLngMaxIndex:Integer;
lBytAscii:Byte;
lLngEncrypted:Integer;
begin
Result:='';
lLngMaxIndex:=Length(pStrMessage);
IflLngMaxIndex=0Then
Exit;
ForlLngIndex:=1TolLngMaxIndexdo
begin
lBytAscii:=Ord(pStrMessage[lLngIndex]);
lLngEncrypted:=Crypt(lBytAscii,PublicKey);
Result:=Result+IntToHex(lLngEncrypted,4)
end;
End;
ProcedureGen2006Key(varst1:String;ConstsSiteName,sYear,sVersion:String;iStr:Integer);
var
sSiteMD5,SA,sCRC:String;
i,k:Integer;
begin
SA:='';
sSiteMD5:=cMD5.UpperMD5(cBase64.StrToBase64(sSiteName)+cBase64.StrToBase64(sVersion));
sCRC:=Encode(Trim(Copy(sSiteMD5,1,5)));
SA:=sSiteMD5+sSiteMD5+sYear+sCRC;
//填充散列
k:=iStr;
fori:=1toLength(SA)do
begin
st1[k]:=SA[i];
k:=k+(imod9)+1;
end;
end;
procedureTForm1.GenPE2006Key;
const
sBase='123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-=';
var
sSiteName,sYear:String;
SN:String;
st1,st2:String;
i:integer;
F1:TextFile;
begin
sSiteName:=Trim(Edit1.Text);
DateSeparator:='-';
ShortDateFormat:='yyyy-mm-dd';
caseRadioGroup1.ItemIndexof
0:sYear:=DateToStr(IncDay(Date,3));
1:sYear:=DateToStr(IncDay(Date,10));
2:sYear:=DateToStr(IncDay(Date,365));
3:sYear:=DateToStr(IncDay(Date,3650));
4:sYear:=Trim(Edit2.Text);
end;
sYear:=Trim(cBase64.StrToBase64(sYear));
Setlength(SN,4096);
//生成随机数
SetLength(st1,4064);
Randomize;
fori:=1toLength(st1)do
st1[i]:=sBase[Random(63)+1];
ifComboBox1.ItemIndex>0then
Gen2006Key(st1,sSiteName,sYear,'CMS'+intTostr(ComboBox1.ItemIndex),1);
ifComboBox2.ItemIndex>0then
Gen2006Key(st1,sSiteName,sYear,'eShop'+intTostr(ComboBox2.ItemIndex),501);
ifComboBox3.ItemIndex>0then
Gen2006Key(st1,sSiteName,sYear,'CRM'+intTostr(ComboBox3.ItemIndex),1001);
//供求
ifCheckBox1.Checkedthen
Gen2006Key(st1,sSiteName,sYear,'SD',3001);
//房产
ifCheckBox2.Checkedthen
Gen2006Key(st1,sSiteName,sYear,'House',3501);
//企业招聘
ifCheckBox3.Checkedthen
Gen2006Key(st1,sSiteName,sYear,'HR',2501);
//室场登记
ifCheckBox4.Checkedthen
Gen2006Key(st1,sSiteName,sYear,'Equipment',2001);
//学生学籍
ifCheckBox5.Checkedthen
Gen2006Key(st1,sSiteName,sYear,'SDMS',1501);
st2:=cMD5.UpperMD5(st1);
//填充序列号
fori:=1to4000do
SN[i]:=st1[i];
fori:=1toLength(st2)do
SN[4000+i]:=st2[i];
fori:=1to64do
SN[4032+i]:=st1[4000+i];
Clipboard.Astext:=SN;
AssignFile(F1,'['+sSiteName+']SN.txt');
Rewrite(F1);
Write(F1,SN);
CloseFile(F1);
end;
procedureTForm1.Button1Click(Sender:TObject);
begin
GenPE2006Key();
end;
procedureTForm1.FormCreate(Sender:TObject);
begin
RadioGroup1.Color:=RGB(78,111,214);
GroupBox1.Color:=RGB(78,111,214);
end;
end.