栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

C# WinForm 登录界面的图片验证码(区分大小写+不区分大小写)

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C# WinForm 登录界面的图片验证码(区分大小写+不区分大小写)

一、功能界面

图1 验证码(区分大小写)

图2 验证码(不区分大小写)

二、创建一个产生验证码的类Class1

(1)生成随机验证码字符串,用的是Random随机函数
(2)创建验证码图片,将该字符串画在PictureBox控件中

Class1.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;//图片
using System.Windows.Forms;

namespace ValidCodeTest
{
  public class Class1
  {
    #region 验证码功能      
    /// 
    /// 生成随机验证码字符串
    /// 
    public static string CreateRandomCode(int CodeLength) 
    {
      int rand;
      char code;
      string randomCode = String.Empty;//随机验证码
     	
     	//生成一定长度的随机验证码    
      //Random random = new Random();//生成随机数对象
      for (int i = 0; i < CodeLength; i++)
      {
 //利用GUID生成6位随机数   
 byte[] buffer = Guid.NewGuid().ToByteArray();//生成字节数组
 int seed = BitConverter.ToInt32(buffer, 0);//利用BitConvert方法把字节数组转换为整数
 Random random = new Random(seed);//以生成的整数作为随机种子
 rand = random.Next();

 //rand = random.Next();   
 if (rand % 3 == 1)
 {
   code = (char)('A' + (char)(rand % 26));
 }
 else if (rand % 3 == 2)
 {
   code = (char)('a' + (char)(rand % 26));   
 }
 else
 {
   code = (char)('0' + (char)(rand % 10));
 }
 randomCode += code.ToString();
      }
      return randomCode;
    }

    /// 
    /// 创建验证码图片
    /// 
    public static void CreateImage(string strValidCode, PictureBox pbox)
    {
      try
      {
 int RandAngle = 45;//随机转动角度
 int MapWidth = (int)(strValidCode.Length * 21);
 Bitmap map = new Bitmap(MapWidth, 28);//验证码图片—长和宽

				//创建绘图对象Graphics
 Graphics graph = Graphics.FromImage(map);
 graph.Clear(Color.AliceBlue);//清除绘画面,填充背景色
 graph.DrawRectangle(new Pen(Color.Black, 0), 0, 0, map.Width - 1, map.Height - 1);//画一个边框
 graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//模式
 Random rand = new Random();
 //背景噪点生成
 Pen blackPen = new Pen(Color.LightGray, 0);
 for (int i = 0; i < 50; i++)
 {
   int x = rand.Next(0, map.Width);
   int y = rand.Next(0, map.Height);
   graph.DrawRectangle(blackPen, x, y, 1, 1);
 }
 //验证码旋转,防止机器识别
 char[] chars = strValidCode.ToCharArray();//拆散字符串成单字符数组
 //文字居中
 StringFormat format = new StringFormat(StringFormatFlags.NoClip);
 format.Alignment = StringAlignment.Center;
 format.LineAlignment = StringAlignment.Center;
 //定义颜色
 Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
 //定义字体
 string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };
 for (int i = 0; i < chars.Length; i++)
 {
   int cindex = rand.Next(7);
   int findex = rand.Next(5);
   Font f = new System.Drawing.Font(font[findex], 13, System.Drawing.FontStyle.Bold);//字体样式(参数2为字体大小)
   Brush b = new System.Drawing.SolidBrush(c[cindex]);
   Point dot = new Point(16, 16);

   float angle = rand.Next(-RandAngle, RandAngle);//转动的度数
   graph.TranslateTransform(dot.X, dot.Y);//移动光标到指定位置
   graph.RotateTransform(angle);
   graph.DrawString(chars[i].ToString(), f, b, 1, 1, format);

   graph.RotateTransform(-angle);//转回去
   graph.TranslateTransform(2, -dot.Y);//移动光标到指定位置
 }
 pbox.Image = map;
      }
      catch (ArgumentException)
      {
 MessageBox.Show("验证码图片创建错误");
      }
    }
    #endregion
  }
}

三、调用

(1)更新验证码
(2)验证(区分大小写)
(3)验证(不区分大小写)

Form1.cs:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ValidCodeTest;

namespace ValidCode
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }


    #region 验证码
    private const int ValidCodeLength = 4;//验证码长度    
    private String strValidCode = "";//验证码     

    //调用自定义函数,更新验证码
    private void UpdatevalidCode()
    {
      strValidCode = Class1.CreateRandomCode(ValidCodeLength);//生成随机验证码
      if (strValidCode == "") return;
      Class1.CreateImage(strValidCode, pbox1);//创建验证码图片
    }
    #endregion


    private void pbox1_Click(object sender, EventArgs e)
    {
      UpdatevalidCode();//点击更新验证码
    }


    private void Form1_Load(object sender, EventArgs e)
    {
      UpdatevalidCode();//加载更新验证码
    }


    /// 
    /// 验证(区分大小写)
    ///     
    private void btn1_Click(object sender, EventArgs e)
    {
      string validcode = txtValidCode.Text.Trim();

      char[] ch1 = validcode.ToCharArray();
      char[] ch2 = strValidCode.ToCharArray();
      int Count1 = 0;//字母个数
      int Count2 = 0;//数字个数

      if (String.IsNullOrEmpty(validcode) != true)//验证码不为空
      {
 for (int i = 0; i < strValidCode.Length; i++)
 {
   if ((ch1[i] >= 'a' && ch1[i] <= 'z') || (ch1[i] >= 'A' && ch1[i] <= 'Z'))//字母
   {
     if (ch1[i] == ch2[i])
     {
Count1++;
     }
   }
   else//数字
   {
     if (ch1[i] == ch2[i])
     {
Count2++;
     }
   }

 }

 int CountSum = Count1 + Count2;
 if (CountSum == strValidCode.Length)
 {
   MessageBox.Show("验证通过", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
   UpdatevalidCode();
   txtValidCode.Text = "";
   txtValidCode.Focus();
 }
 else
 {
   MessageBox.Show("验证失败", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
   UpdatevalidCode();//更新验证码
   txtValidCode.Text = "";
   txtValidCode.Focus();
 }
      }
      else//验证码为空
      {
 MessageBox.Show("请输入验证码", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
 UpdatevalidCode();//更新验证码
 txtValidCode.Text = "";
 txtValidCode.Focus();
      }
    }


    /// 
    /// 验证(不区分大小写)
    ///  
    private void btn2_Click(object sender, EventArgs e)
    {
      string validcode = txtValidCode.Text.Trim();

      if (String.IsNullOrEmpty(validcode) != true)//验证码不为空
      {
 if (validcode.ToLower() == strValidCode.ToLower())
 {
   MessageBox.Show("验证通过", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
   UpdatevalidCode();
   txtValidCode.Text = "";
   txtValidCode.Focus();
 }
 else
 {
   MessageBox.Show("验证失败", "警告", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
   UpdatevalidCode();//更新验证码
   txtValidCode.Text = "";
   txtValidCode.Focus();
 }
      }
      else//验证码为空
      {
 MessageBox.Show("请输入验证码", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
 UpdatevalidCode();//更新验证码
 txtValidCode.Text = "";
 txtValidCode.Focus();
      }
    }
  }
}

.exe测试文件下载: ValidCode_jb51.zip

参考文章:
https://www.jianshu.com/p/d89f22cf51bf

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/122240.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号