现在很多网站有一个邀请码机制,比如开源社区,一方面可以防止灌水,另一方面大家都是互相介绍加入网站,提升网站用户层次。维护一个良好的社区环境。本文章就介绍实现邀请码机制。提供C#源代码。
邀请码组成:1-20080330134035-a21f34a965d1cb65 第一位是:用户编号,第二位是年月日时分秒,第三位是校验码。
校验码算法为:用户编号+年月日时分秒+私钥,取16位md5值。
代码:
string
t
=
DateTime.Now.ToString(
"
yyyyMMddHHmmss
"
);
string k = BLL.StringUtil.md5(User.Identity.Name + t + " b497570b-69a2-4bd1-9380-7e74616795ab " , 16 );
txt.Text = string .Format( " {0}-{1}-{2} " , User.Identity.Name, t, k);
string k = BLL.StringUtil.md5(User.Identity.Name + t + " b497570b-69a2-4bd1-9380-7e74616795ab " , 16 );
txt.Text = string .Format( " {0}-{1}-{2} " , User.Identity.Name, t, k);
加私钥的目的就是为了防止别人知道你的算法后,写注册机(当然了,也要看网站的重要程度,
)
![](https://i-blog.csdnimg.cn/blog_migrate/e98c462edf34f139bc36d6d31f452feb.png)
这样就计算出邀请码了。
下面是:
aspx中(
验证邀请码有效性
):
<
asp:TextBox ID
=
"
txtCode
"
runat
=
"
server
"
Rows
=
"
10
"
></
asp:TextBox
><
asp:RequiredFieldValidator ID
=
"
r6
"
runat
=
"
server
"
ControlToValidate
=
"
txtCode
"
Display
=
"
Dynamic
"
ErrorMessage
=
"
请填写邀请码
"
SetFocusOnError
=
"
True
"
></
asp:RequiredFieldValidator
>
< asp:RegularExpressionValidator ID = " RegularExpressionValidator1 " runat = " server " ControlToValidate = " txtCode "
Display = " Dynamic " ErrorMessage = " 邀请码格式错误 " SetFocusOnError = " True " ValidationExpression = " \d+-\d{14}-[\da-f]{16} " ></ asp:RegularExpressionValidator >
< asp:RegularExpressionValidator ID = " RegularExpressionValidator1 " runat = " server " ControlToValidate = " txtCode "
Display = " Dynamic " ErrorMessage = " 邀请码格式错误 " SetFocusOnError = " True " ValidationExpression = " \d+-\d{14}-[\da-f]{16} " ></ asp:RegularExpressionValidator >
后台CS文件(
验证了邀请码的合法性
):
string
[] tmp
=
txtCode.Text.Split(
'
-
'
);
BLL.StringUtil.md5(tmp[ 0 ] + tmp[ 1 ] + " b497570b-69a2-4bd1-9380-7e74616795ab " , 16 ) == tmp[ 2 ]
BLL.StringUtil.md5(tmp[ 0 ] + tmp[ 1 ] + " b497570b-69a2-4bd1-9380-7e74616795ab " , 16 ) == tmp[ 2 ]
然后还要把用过的邀请码记录到数据库,下次有新的邀请码来验证的时候,去数据库里比较一下,存在的话,表示是用过的邀请码,已经失效了。