C#WinForm 實現登陸界面驗證碼功能(區分大小寫+不區分大小寫)

文章來自:https://blog.csdn.net/IT_xiao_guang_guang/article/details/104250015數組


1、功能界面

圖1 驗證碼(區分大小寫)
圖2 驗證碼(不區分大小寫)

2、建立一個產生驗證碼的類Class1

(1)生成隨機驗證碼字符串,用的是Random隨機函數
(2)建立驗證碼圖片,將該字符串畫在PictureBox控件中
dom

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
    }
}

3、調用

(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測試

相關文章
相關標籤/搜索