Winform实现验证码功能
介绍下Winform实现验证码的步骤:
首先拖入控件:PictureBox显示验证码;TextBox输入验证码;Check按钮;Label标签-点击更换验证码;
1.随机产生一个4位的字符串,由数字,大小写字母组成:
string RandomCode() { string retCode = ""; for (int i = 0; i < 4; i++) { while (true) { int id = rd.Next(48, 122); if (id >= 48 && id <= 57 || id >= 65 && id <= 90 || id >= 97 && id <= 122) { retCode += Convert.ToChar(id).ToString(); break; } } } return retCode; }
2.创建画板:
Bitmap bMap = new Bitmap(this.pictureBox1.Width,this.pictureBox1.Height); Graphics g = Graphics.FromImage(bMap); g.Clear(Color.LightGray);
3.在画板上画几条颜色随机的线条:
for (int i = 0; i < 8; i++) { int x1 = rd.Next(bMap.Width); int y1 = rd.Next(bMap.Height); int x2 = rd.Next(bMap.Width); int y2 = rd.Next(bMap.Height); g.DrawLine(new Pen(Color.FromArgb(rd.Next())), x1, y1, x2, y2); }
4.画一些背景噪点,颜色随机:
for (int i = 0; i < 600; i++) { int x = rd.Next(this.pictureBox1.Width); int y = rd.Next(this.pictureBox1.Height); bMap.SetPixel(x, y, Color.FromArgb(rd.Next())); }
5.画验证码:
Font ft = new Font("宋体", 24, FontStyle.Bold | FontStyle.Italic); System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush( new Rectangle(0, 0, bMap.Width, bMap.Height), Color.OrangeRed, Color.DarkOrchid, 1.2f, true); for (int i = 0; i < codeStr.Length; i++) { g.DrawString(codeStr[i].ToString(), ft, brush, 5 + 23 * i, -1); }
6.将画好的图像赋给PictureBox:
this.pictureBox1.Image = bMap; g.Dispose(); ft.Dispose();
7.按钮点击事件:
private void Form1_Load(object sender, EventArgs e) { rd = new Random(); CreateCodeImage(checkCode = RandomCode()); } private void label1_Click(object sender, EventArgs e) { CreateCodeImage(checkCode = RandomCode()); } private void button1_Click(object sender, EventArgs e) { if (textBox1.Text != checkCode) { MessageBox.Show("验证失败,请重新输入", "提示"); CreateCodeImage(checkCode = RandomCode()); } else MessageBox.Show("验证通过", "提示"); }
x效果展示: