• C#WinForm 实现登录界面验证码功能(区分大小写+不区分大小写)


    文章来自:https://blog.csdn.net/IT_xiao_guang_guang/article/details/104250015


    一、功能界面

    图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 验证码功能            
            /// <summary>
            /// 生成随机验证码字符串
            /// </summary>
            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++)
                {
                    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;
            }
    
            /// <summary>
            /// 创建验证码图片
            /// </summary>
            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 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();//加载更新验证码
            }
    
    
            /// <summary>
            ///  验证(区分大小写)
            /// </summary>        
            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();
                }
            }
    
    
            /// <summary>
            ///  验证(不区分大小写)
            /// </summary>  
            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测试文件下载地址: https://www.lanzous.com/i984xva
      密码:test

  • 相关阅读:
    POJ 2349 Arctic Network
    OpenJudge 东方14ACM小组 / 20170123 06:Challenge 3
    OpenJudge 东方14ACM小组 / 20170123 02 岛屿
    Best Coder Lotus and Characters
    洛谷 P 1164 小A点菜
    楼房
    虫食算
    斗地主
    国王游戏
    最优贸易
  • 原文地址:https://www.cnblogs.com/xggbest/p/12293376.html
Copyright © 2020-2023  润新知