需要验证码的地方还真不少,这主要是为了确保用户信息的安全。

这里我做了一个纯字母的验证码。

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需要进一步完善!

验证码(一)Ajax的姑娘,加油!验证码(一)