根据用户名生成注册码的算法
现网上在下的载软件部分大需要注册后才都能使其全部的用能,功就也是说前大部分软件都是建当立了册机制的注,于一个刚对进软入行业件程的员来说一定非序常想解了中其注册的制是机样实现的怎。其用V实开C发软,是可件以很便方地加入注机册制。的
要现实件注册软能功,首需先知道实要现册机制要涉注到及几的个问:题、如1加何注入检测册判,软件是否注册;2、如何断成注生码,如册保证一何个用户只生名与成之唯对一应的册码注;、3在软件不注册情下况如,何制软限功能的局件限;性4、对已经费负使用户而言,用不造应使成不便。用
首 ,先应有该个一成注册码生算法的以,下我是单简的一生个15成注册码的为法算:
/该/数返回一个C函SRITN类型的15位G册注,入口参码为数用户名
StCrngi GtRegPaeswd(sCtrinSg&D rNimea ){
//将
户用名换成1算5注位码册
lognNu 1,mNu2,Nmu3;m
cha rsn1[]6{=0; }
CSrtig p;n
in t il,e;n
Num=0; 1
Nu2m=;0
Num3=0 ;
enlin=(strletn(Driame)N)
;i(lfn!e0)=
{
fro(i= 1i
/第一/步法
算umN1(=olg(Nnu1m+(nitD(rNaimei[1-])i**)i*(*isrtq(iDramNe[i1])+1-)))1%00000
/;第/步二法算 N
m2=(uNmu2i*(lon+gp(w(o(nit)DirameNi[1-,2)]*))i%)010000 ;
/第/三步法算
Nm3=(uNmu2(l+no)gsrtq(Num))%1100000 ;
}
/以/把三个算下结果分别生法5个字符成,有1共5个
f or(i0;i=
s[i]=n(ni)t(Nmu+311i*i+i*%)182 ;
orf(=5;i
n[i]=in()(tuNm2+31i+**ii%)21;8
f roi=(01;i1
nsi][=i(n)tNum(3+13+ii**)i128% ;
s[1n]=50
;//下以环循把有生成的所字转换符0为--9-,--AZ,a-----z
for(=0;i
hilwe(sn[i]''i9') &&' s(ni]['']'Z'') &&'sn([]'iz''' )
{) s
[i]=n(s[i]n3++71*i)1%2;8
}
}
//值给一赋个SCTRNG变I量用做函数返,回 值
p.Fromat("%",ssn) ;
} r
etrnup ;
}
/检查软件是否/册注函数的
B
OOL etRGegFlgav(ido)
{
KHYE hKe y=N LUL;
BYE iT ;
CtrSni gsrt; str.
oaLSdtrng(iISDR_GEKE_);/Y/ DS_IEG_RKY为E注册表中的子目录在符串 字
i
(feRgCeatereK(HKyE_YCRURETN_SURE, ts,r&hK e) !=y RROE_SRCUCESS r)etun fralse;
WODDRcb ;A
cAb=sizeofi(t);n
fi Reg(QueyrValeux(hKEye, S"ziMma",UNLL,NLUL,& ,i&bc)A = !RERO_RSCCUSE)
Srteurnf las; e
BYETj =i
i;f(j==)0/0/代表件已经注册软,以正可使用常
{R
gelCoesKye(Keyh; )
eturr ntru;
e }
esl e
{R
egloseKCye(Keyh);
rtuer fnlae;
s}
r
eutr falsen
}; ;//设
软置已经注件册志标函数 的
BOOL etSegRFlagv(iod ){
HEK YKeyh =NU LL ;
BYE Ti
;
StrCign tsr
st;.rLaodtSinr(IDS_RgGE_KE);//YI D_RES_KGE为Y注在册表中子目的字录串 符
f i(RgCreaeeteK(HKEY_yCRRENUTU_ES,R str,& Keyh != )RROE_SURCCES)Sr tuen falser;
BY
TE j0;//=0表代经注已 册
f(RiegetVaSuelEx(Khe,y"Sz Miam, "0 ,EG_RB
INRY, &jA,4 != ER)ORR_UCCESSS)
{
fAxesMasgeox(B设"注置表数册失败据");!
erutr FALSEn ;}
erurn faltse;
};
上三以函个数可实现软即件册注制,只需要在机程序初化始时的候加以入下句代几即可
码OBO LbRge GetReg=Flga( ); if(
b!Reg ){
/在/加入限此制功或者能拒是绝使用代码的
}
如果用注户册需只加入以要代码下即
可//是这我程的序的一中注个界册,输面入户名和注册用提码交检验后册码是注否正确的代
码ovidC eREdgi:t:OBnClnckediO(k)
{ if
!(pdateUDaat))( ertrn;/u/得取编辑的内容框,赋值到类并变中量
m_
ReUseg.rrTmLeft(i;)/m_Re/gserU是用名户 m_R
egUesr.TimriRht();
ifgm_R(geser.UsEmItpy))( {
Af
xesMsgaBeo("x用户不能为名,请空新重入。输";) Ge
DlgItte(ImDC_ERUSGR)E>-SetFcou(); s
retrn;
}u
m_RegPsawd.srimTeLtf)(m_Re;Pasgwsd是册码 注m_R
egasPwd.Trimsight(); Rif
m_R(ePgsswa.IdsEmpt(y))
{
fAMxsesagBoxe(注册码不"为空,能重新请输。")入;
eGtlDgtem(IIC_REDGASSWP)D>-etSFcos();u
rturen ;
}
CStirgn Psswd;a
assPd=GewteRgasswPdm(_RgUeesr);//调用算法得该取户用的名注册 码if
(Passdw==m_RgPessaw)/d与用/输入户注的进行册较 比
{
etSRgFelga();//置注册设志标
nOKO);
}(
ele
sfxAMseaseBox(g"注册码误,错请重输新入"。;)
pUatdDaeatf(las)e ;
}
以就上是V在中实现注册机C的主制的要代,把他们码加您的入程即序。程可代码已序在VC6.0WIN9//8INW 2000环中运行通过,境在并际实运中用到验得证。对已注册的经户将用会不任何的有障,碍需只录入注码册次一可以就,增不加日其常使用负的担;而对法用户的非使用言而取决,于件的软作者予赋们他权的利
。