【C#】Winform验证码(GDI+)源码分享

先上效果图:
*效果图*
需求:6位随机字符串,包括数字、大小写字母,颜色随机;随机干扰线条和噪点;点击图片更换验证码;判断验证码输入是否正确;区分字母大小写(感兴趣的可以加上不区分大小写的功能)。

验证码是一张图片,放置在pictureBox容器中,我们要将验证码绘制在位图(Bitmap)中,然后将该位图放入pictureBox中。创建一个位图对象作为画布:

Bitmap bitmap = new Bitmap(351, 183);

再用bitmap创建GDI+对象:

Graphics g = Graphics.FromImage(bitmap);

创建一个产生随机数的对象:

Random r = new Random();

我们需要申明下验证码包含的字符及字符颜色:

//验证码包含的字符
string allCode =
  "0123456789" +
  "bcdefghijklmnopqrstuvwxyz" +
  "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

Color[] colors = 
  { Color.Red,
    Color.Black, 
    Color.Blue, 
    Color.Green, 
    Color.Pink, 
    Color.Purple };

下面就是绘制验证码,我们通过遍历的方式逐个绘制验证码(本例采用6位验证码):

//遍历绘制单个字符
for (int i = 0; i < 6; i++)
{
  //字体大小在(15, 24)之间
  Font font = new Font(
    fonts[r.Next(0, fonts.Length)], 
    50f + r.Next(-5, 5), 
    FontStyle.Bold);
    
  SolidBrush brush = new SolidBrush(
    colors[r.Next(0, colors.Length)]);
    
  g.DrawString(code[i].ToString(), font, brush, i * 40, 20);
}

这里调用了DrawString()方法来绘制,其中四个参数分别为:

·要绘制的字符
·字符的字体
·字符的颜色
·字符的坐标点(字体左上角的坐标)

验证码绘制完,我们加一些干扰线条和噪点:

//绘制线条
for (int i = 0; i < 30; i++)
{
  g.DrawLine(
    Pens.Green, 
    r.Next(0, bitmap.Width), 
    r.Next(0, bitmap.Height), 
    r.Next(0, bitmap.Width), 
    r.Next(0, bitmap.Height));
}

//绘制噪点(不用GDI+绘制)
for (int i = 0; i < 300; i++)
{
  bitmap.SetPixel(
    r.Next(0, bitmap.Width),
    r.Next(0, bitmap.Height), 
    colors[r.Next(0, colors.Length)]);
}

欢迎关注公众号【几行简码】(ID:few_codes)免费下载源码,刚开始做,希望大家支持。

发布了3 篇原创文章 · 获赞 3 · 访问量 63

猜你喜欢

转载自blog.csdn.net/njtsgseuzy/article/details/105196479