要实现软件注册功能,首先需要知道实现注册机制要涉及到的几个问题:1、如何加入注册检测,判断软件是否注册;2、如何生成注册码,如何保证一个用户名只生成与之唯一对应的注册码;3、在软件不注册情况下,如何限制软件功能的局限性;4、对已经负费使用用户而言,不应造成使用不便。
首先,应该有一个生成注册码的算法,以下是我简单的一个生成15位注册码的算法:
//该函数返回一个CSTRING类型的15位注册码,入口参数为用户名
CString GetRegPasswd(CString &DirName)
//将用户名换算成15位注册码
long Num1,Num2,Num3;
char sn16=0;
CString p;
int i,len;
Num1=0;
Num2=0;
Num3=0;
len=int(strlen(DirName));
for( i=1;i<=len;i++)
//第一步算法
Num1=(long(Num1+(int(DirNamei-1)*i*i)*(i*sqrt(DirNamei-1)+1)))%100000;
//第二步算法
Num2=(Num2*i+(long(pow((int)DirNamei-1,2)*i)))%100000;
//第三步算法
Num3=(Num2+(long)sqrt(Num1))%100000;
//以下把三个算法结果分别生成5个字符,共有15个
for(i=0;i<5;i++)
sni=(int)(Num1+31+i*i*i)%128;
for(i=5;i<10;i++)
sni=(int)(Num2+31+i*i*i)%128;
for(i=10;i<15;i++)
sni=(int)(Num3+31+i*i*i)%128;
sn15=0;
//以下循环把所有生成的字符转换为09,AZ,az
for(i=0;i<15;i++)
while((sni<0sni>9) &&(sniZ)&&(sniz) )
sni=(sni+31+7*i)%128;
//赋值给一个CSTRING变量,用做函数返回值
p.Format(%s,sn);
return p;
//检查软件是否注册的函数热门推荐: 如何迅速成为Java高手 成为编程(www.cppentry.com)高手的八大奥秘
1 2
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);
return false;
BYTE j=i;
RegCloseKey(hKey);
return true;
else
RegCloseKey(hKey);
return false;
return false;
;
//设置软件已经注册标志的函数
BOOL SetRegFlag(void)
HKEY hKey = NULL;
BYTE i;
CString str;