软件有效期的控制

软件要给客户
虽然主要还是服务

但有效期还是要稍微控制一下

我的做法:


在数据库中建了一张表

把有效期的相关信息存入
然后再客户登陆时取出信息进行一下操作:

首先判断是否存在该表,不存在跳出

若存在,解密有效期信息和当前日期进行比较
判断是否过期。


有好大的漏洞

用户修改本机日期后延即可
问了人,说延也可以啊,那单子的日期也跟着延后啊
也是啊

可又一想,登录以后再把日期改过来呢?

咋办?
想着是把第一次成功登录的日期记录一下
然后再根据这个日期来控制

找资料,解决中。。。

by aren



转载于:https://www.cnblogs.com/wisdom/archive/2007/03/29/692474.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
请不要用于商业或谋取非法利益!只限于学习交流!有关时间限制使用和软件注册的设计!procedure Tgcdzsys_grjs.FormCreate(Sender: TObject);var Reg:Tregistry; //自定义注册表变量 NowDate,FirstDate:TDateTime;//自定义时间变量 KeyName,TempCode,TempName,TempStr:string; //自定义字符串变量 Same:Integer; //自定义整数变量 NumberOfDays:Real;begin //SB.Panels[0].Text:=‘ 工程地质勘察应用系统‘; //SB.Panels[1].Text:=‘ Email: Grjs_2001@163.com 或 Grjs_2004@126.com‘; NoRegistry:=true; NowDate:=date; //取得运行时系统日期 try //创建注册表,有该键则读取,无则创建 Reg:=Tregistry.Create ; Reg.RootKey :=Hkey_local_machine; KeyName:=‘SoftwaregrjsExample‘; if Reg.OpenKey(KeyName,true) then begin TempName:=Reg.ReadString(‘UsrName‘); TempCode:=Reg.ReadString(‘Passwd‘); //读取用户名,注册号 try FirstDate:=Reg.ReadDate(‘Date‘); //非第一次则读入第一次运行时间 except FirstDate:=NowDate; Reg.WriteDate(‘Date‘,NowDate); //若为第一次运行,则写入系统日期 end; end; Reg.CloseKey; finally Reg.Free; end; TempStr:=Encrypt(TempName); //通过自定义函数Encrypt()来获取密码 Same:=CompareText(TempStr,TempCode); //比较密码 if TempName<>‘‘ then if Same=0 then NoRegistry:=false; //验证密码,通过NoRegistry为false if NoRegistry then begin //若未注册... NumberOfDays:=Nowdate-FirstDate; SpareDays:=Round(10-NumberOfDays); ShowMessage(‘你已经剩下‘+FloatToStr(SpareDays)+‘天的使用时间了!请尽快注册!‘); if((NumberOfDays>10) or (NumberOfDays<-1)) then begin ShowMessage(‘程序未注册超过试用期或更改系统时间,将终止运行!‘); Application.Terminate;//超过10天,则禁止运行 end; end;end;function Tgcdzsys_grjs.Encrypt(TempStr:string):string;var Str1:String; i,j:Integer;begin Str1:=‘‘; for i:=1 to Length(TempStr) do begin //密码匹配方式 j:=(i*i*i*i mod (i+30))+(i*i mod (i+20))+i*3+1; Str1:=Str1+chr(ord(TempStr[i])+j); end; Result:=Str1;end;procedure Tgcdzsys_grjs.DBBhelphgrjsClick(Sender: TObject);var InptName,InptCode,RealCode:String; Same:Integer; Reg:Tregistry; Keyname:String;begin if NoRegistry then //未注册时做 begin RealCode:=‘‘; InptName:= InputBox(‘注册‘, ‘输入你的名字‘, ‘‘); if InptName<>‘‘ then begin InptCode:= InputBox(‘注册‘, ‘输入注册号‘, ‘‘); RealCode:=Encrypt(InptName); Same:=CompareText(RealCode,InptCode); if (Same<>0) then ShowMessage(‘注册号码不对,注册未成功!‘) else begin //密码匹配时做:把用户名、密码写入注册表 Try Reg:=Tregistry.Create ; //激发注册表 Reg.RootKey :=hkey_local_machine;//注册表路径 KeyName:=‘SoftwaregrjsExample‘;//创建新的注册文件 if Reg.OpenKey(KeyName,true) then begin Reg.WriteString(‘Passwd‘,InptCode); //注册密码 Reg.WriteString(‘UsrName‘,InptName);//注册用户名 end; Reg.CloseKey ; //关闭 finally Reg.Free; //释放注册表 end; NoRegistry:=false;//可修改注册后的界面 end; end; end;end;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值