请教一个算法问题

jerrycui 2005-12-05 09:55:05
我现在的程序,想通过验证CDKEY来确定系统的用户数目和过期日期。

想请教一下具体实现的思路和方法,谢谢。
...全文
187 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jerrycui 2005-12-10
  • 打赏
  • 举报
回复
提上去.各位老大给了答案就结分.
wizardqi 2005-12-10
  • 打赏
  • 举报
回复
//呵呵,以下是我自己创造的一对函数,希望可以帮的上楼主! ^_^


//给定用户ID和客户序号产生28为CDKEY
//Length(UserLen)<=10
function GetEasyCDKEY(UserID:String;UserIndex:Integer):String;
var
DATAStr:String;
TS:Comp;
i,j,CheckSum:Integer;
begin
TS:=TimeStampToMSecs(DateTimeToTimeStamp(Now));
DATAStr:=IntToHex(PInt64(@TS)^,12)+IntToHex(UserIndex XOR $77777777,8);
CheckSum:=1;
j:=1;
for i:=1 to Length(UserID) do
begin
Inc(CheckSum,Ord(UserID[i])+Ord(DATAStr[j])-64);
Inc(j);
if j>20 then j:=1;
end;
Result:=DATAStr+IntToHex(CheckSum XOR $77777777,8);
end;
//检测用户和CDKEY有效性,如果检测成功返回True同时返回注册时间和用户序号.
function CheckEasyCDKEY(UserID,CDKEY:String;var regDateTime:TDateTime;var UserIndex:Integer):Boolean;
var
DATAStr:String;
TS:Comp;
i,j,CheckSum:Integer;
begin
Result:=False;
if Length(CDKEY)<>28 then Exit;
DATAStr:=Copy(CDKEY,1,20);
CheckSum:=1;
j:=1;
for i:=1 to Length(UserID) do
begin
Inc(CheckSum,Ord(UserID[i])+Ord(DATAStr[j])-64);
Inc(j);
if j>20 then j:=1;
end;
try
if CheckSum<>(StrToInt('$'+Copy(CDKEY,21,8)) XOR $77777777) then Exit;
PInt64(@TS)^:=StrToInt64('$'+Copy(DATAStr,1,12));
regDateTime:=TimeStampToDateTime(MSecsToTimeStamp(TS));
UserIndex:=StrToInt('$'+Copy(DATAStr,13,8)) XOR $77777777;
except
on E:Exception do Exit;
end;
Result:=True;
end;
//测试
procedure TForm1.Button1Click(Sender: TObject);
var
R:String;
regdt:TDateTime;
UserIndex:Integer;
begin
R:=GetEasyCDKEY('quanqi',100);
if CheckEasyCDKEY('quanqi',R,regdt,UserIndex) then
ShowMessage(R+#13
+DateTimeToStr(regdt)+#13
+IntToStr(UserIndex));
end;
ZyxIp 2005-12-05
  • 打赏
  • 举报
回复
晕答错地方了。
jerrycui 2005-12-05
  • 打赏
  • 举报
回复
可否给这样一个EXAMPLE.
jerrycui 2005-12-05
  • 打赏
  • 举报
回复
我也是有点思路,只是想寻找一些简练的方法,集思广益。我现在用的不是很满意。直接是比较和加密解密.
ssq237712 2005-12-05
  • 打赏
  • 举报
回复
产生CDKEY的时候只要含有用户数目信息及有效期信息,验证的时候根据相应的算法解码。
ZyxIp 2005-12-05
  • 打赏
  • 举报
回复
只返回有用的列,不要用*;

返回仅量少的结果。

ly_liuyang 2005-12-05
  • 打赏
  • 举报
回复
方法N多:)
qizhanfeng 2005-12-05
  • 打赏
  • 举报
回复
up

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧