驗證碼(一)

需要驗證碼的地方還真不少,這主要是爲了確保用戶信息的安全。

這裏我做了一個純字母的驗證碼。

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();
            }
        }
    }

表現出來就是:

161055201.png

仍然還存在着Bug需要進一步完善!

j_0047.gifAjax的姑娘,加油!j_0047.gif

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章