現在很多網站有一個邀請碼機制,比如開源社區,一方面可以防止灌水,另一方面大家都是互相介紹加入網站,提升網站使用者層次。維護一個良好的社區環境。本文章就介紹實現邀請碼機制。提供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); 加私密金鑰的目的就是為了防止別人知道你的演算法後,寫註冊機(當然了,也要看網站的重要程度,)這樣就計算出邀請碼了。 下面是: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> 後台CS檔案(驗證了邀請碼的合法性):string[] tmp = txtCode.Text.Split('-');
BLL.StringUtil.md5(tmp[0]+tmp[1]+"b497570b-69a2-4bd1-9380-7e74616795ab", 16)==tmp[2]然後還要把用過的邀請碼記錄到資料庫,下次有新的邀請碼來驗證的時候,去資料庫裡比較一下,存在的話,表示是用過的邀請碼,已經失效了。