在VC中怎样实现软件的注册机制

分类: VC.NET   出处:iocblog整理  更新时间:2008-08-08   添加到收藏  

    现在网上下载的软件大部分都需要注册后才能使用其全部的功能,也就是说当前大部分软件都是建立了注册机制的,对于一个刚进入软件行业的程序员来说一定非常想了解其中的注册机制是怎样实现的。其实用vc开发软件,是可以很方便地加入注册机制的。 

    要实现软件注册功能,首先需要知道实现注册机制要涉及到的几个问题:1、如何加入注册检测,判断软件是否注册;2、如何生成注册码,如何保证一个用户名只生成与之唯一对应的注册码;3、在软件不注册情况下,如何限制软件功能的局限性;4、对已经负费使用用户而言,不应造成使用不便。 

    首先,应该有一个生成注册码的算法,以下是我简单的一个生成15为注册码的算法:
//该函数返回一个cstring类型的15位注册码,入口参数为用户名
cstring getregpasswd(cstring &dirname) 
{
//将用户名换算成15位注册码
long num1,num2,num3;

char sn[16]={0};
cstring p;
int i,len;

num1=0; 
num2=0;
num3=0;

len=int(strlen(dirname));
if(len!=0)
{
for( i=1;i<=len;i++)
{
//第一步算法
num1=(long(num1+(int(dirname[i-1])*i*i)*(i*sqrt(dirname[i-1])+1)))%100000;
//第二步算法
num2=(num2*i+(long(pow((int)dirname[i-1],2)*i)))%100000;
//第三步算法
num3=(num2+(long)sqrt(num1))%100000;
}
//以下把三个算法结果分别生成5个字符,共有15个
for(i=0;i<5;i++)
sn[i]=(int)(num1+31+i*i*i)%128;
for(i=5;i<10;i++)
sn[i]=(int)(num2+31+i*i*i)%128;
for(i=10;i<15;i++)
sn[i]=(int)(num3+31+i*i*i)%128;
sn[15]=0;
//以下循环把所有生成的字符转换为0---9,a---z,a----z
for(i=0;i<15;i++)
{
while((sn[i]<@#0@# || sn[i]>@#9@#) && (sn[i]<@#a@# || sn[i]>@#z@#) &&(sn[i]<@#a@# || sn[i]>@#z@#) )
{
sn[i]=(sn[i]+31+7*i)%128;
}
}

//赋值给一个CSTRING变量,用做函数返回值
p.Format("%s",sn);
}
return p;

//检查软件是否注册的函数

BOOL GetRegFlag(void)
{
HKEY hKey = NULL;
BYTE i;

CString str;
str.LoadString(IDS_REG_KEY);// IDS_REG_KEY为在注册表中的子目录字符串

if (RegCreateKey(HKEY_CURRENT_USER, str, &hKey) != ERROR_SUCCESS) return false;

DWORD cbA;
cbA=sizeof(int);
if( RegQueryValueEx(hKey, "SzMima",NULL,NULL, &i,&cbA) != ERROR_SUCCESS)
return false;

[1] [2] [3] 下一页