需要驗證碼的地方還真不少,這主要是爲了確保用戶信息的安全。
這裏我做了一個純字母的驗證碼。
Random r=new Random (); string all = ""; private void btnCreatAuthCode_Click(object sender, EventArgs e) { GetAuthCodes(); } private void GetAuthCodes() { //定義一個整數用來存儲產生的隨機數的個數 int count = r.Next(4, 6); //準備一張畫紙 Image img = new Bitmap(this.lblContent.Width, this.lblContent.Height); //準備一個畫板,並且將準備好的畫紙貼在畫板上 Graphics g = Graphics.FromImage(img); //利用for循環來控制驗證碼的個數 for (int i = 0; i < count; i++) { //以ASICLL碼的形式隨機生成小寫字母 string single = ((char)r.Next(97, 123)).ToString(); //在貼好畫紙的畫板上畫字符串(驗證碼) //注意這個時候生成驗證碼有多個,每個驗證碼的位置不能重複 g.DrawString(single, new Font("宋體", r.Next(20, 50)), new LinearGradientBrush(new Point(0, this.lblContent.Width - 50), new Point(0, this.lblContent.Height / 2), Color.FromArgb(r.Next(0, 256), r.Next(0, 256), r.Next(0, 256)), Color.FromArgb(r.Next(0, 256), r.Next(0, 256), r.Next(0, 256))), this.lblContent.Width * i / count,//確保驗證碼的位置隨機不重複 r.Next(0, this.lblContent.Height / 2)); //將單個生成的驗證碼拼接起來 all += single; //在驗證碼上加上線條,注意線條的粗細,如果不寫就默認爲0,此時會看不到線條 g.DrawLine(new Pen(Color.FromArgb(r.Next(0, 256), r.Next(0, 256), r.Next(0, 256)),1), new Point(r.Next(0,this.lblContent.Width), r.Next(0,this.lblContent.Height/2)), new Point(r.Next(0, this.lblContent.Width), r.Next(0, this.lblContent.Height / 2))); } //將畫好東西的畫紙顯示出來 this.lblContent.Image = img; //釋放資源 g.Dispose(); } private void linkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { GetAuthCodes(); } /// <summary> /// 校驗按鈕的功能 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnCheck_Click(object sender, EventArgs e) { //判斷用戶寫入的值和獲取的驗證碼是否相同,如果相同就提示用戶相同。 //注意同時要將顯示驗證碼的標籤和用戶輸入的文本框清空,否則可能會造成空間不足 if (this.txtCheckCode.Text==all) { MessageBox.Show("驗證碼正確","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Information); all = ""; this.txtCheckCode.Clear(); } if (this.txtCheckCode.Text!=all) { MessageBox.Show("驗證碼錯誤", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information); all = ""; this.txtCheckCode.Clear(); } } }
表現出來就是:
仍然還存在着Bug需要進一步完善!