最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# WinForm 登錄界面的圖片驗證碼(區(qū)分大小寫+不區(qū)分大小寫)

 更新時間:2020年02月17日 11:16:57   作者:人生、蛻變  
這篇文章主要介紹了C# WinForm 登錄界面的圖片驗證碼(區(qū)分大小寫+不區(qū)分大小寫),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、功能界面

圖1 驗證碼(區(qū)分大小寫)

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

二、創(chuàng)建一個產(chǎn)生驗證碼的類Class1

(1)生成隨機(jī)驗證碼字符串,用的是Random隨機(jī)函數(shù)
(2)創(chuàng)建驗證碼圖片,將該字符串畫在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>
    /// 生成隨機(jī)驗證碼字符串
    /// </summary>
    public static string CreateRandomCode(int CodeLength) 
    {
      int rand;
      char code;
      string randomCode = String.Empty;//隨機(jī)驗證碼
     	
     	//生成一定長度的隨機(jī)驗證碼    
      //Random random = new Random();//生成隨機(jī)數(shù)對象
      for (int i = 0; i < CodeLength; i++)
      {
        //利用GUID生成6位隨機(jī)數(shù)   
        byte[] buffer = Guid.NewGuid().ToByteArray();//生成字節(jié)數(shù)組
        int seed = BitConverter.ToInt32(buffer, 0);//利用BitConvert方法把字節(jié)數(shù)組轉(zhuǎn)換為整數(shù)
        Random random = new Random(seed);//以生成的整數(shù)作為隨機(jī)種子
        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;
    }

    /// <summary>
    /// 創(chuàng)建驗證碼圖片
    /// </summary>
    public static void CreateImage(string strValidCode, PictureBox pbox)
    {
      try
      {
        int RandAngle = 45;//隨機(jī)轉(zhuǎn)動角度
        int MapWidth = (int)(strValidCode.Length * 21);
        Bitmap map = new Bitmap(MapWidth, 28);//驗證碼圖片—長和寬

				//創(chuàng)建繪圖對象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);
        }
        //驗證碼旋轉(zhuǎn),防止機(jī)器識別
        char[] chars = strValidCode.ToCharArray();//拆散字符串成單字符數(shù)組
        //文字居中
        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);//字體樣式(參數(shù)2為字體大小)
          Brush b = new System.Drawing.SolidBrush(c[cindex]);
          Point dot = new Point(16, 16);

          float angle = rand.Next(-RandAngle, RandAngle);//轉(zhuǎn)動的度數(shù)
          graph.TranslateTransform(dot.X, dot.Y);//移動光標(biāo)到指定位置
          graph.RotateTransform(angle);
          graph.DrawString(chars[i].ToString(), f, b, 1, 1, format);

          graph.RotateTransform(-angle);//轉(zhuǎn)回去
          graph.TranslateTransform(2, -dot.Y);//移動光標(biāo)到指定位置
        }
        pbox.Image = map;
      }
      catch (ArgumentException)
      {
        MessageBox.Show("驗證碼圖片創(chuàng)建錯誤");
      }
    }
    #endregion
  }
}

三、調(diào)用

(1)更新驗證碼
(2)驗證(區(qū)分大小寫)
(3)驗證(不區(qū)分大小寫)

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 = "";//驗證碼            

    //調(diào)用自定義函數(shù),更新驗證碼
    private void UpdateValidCode()
    {
      strValidCode = Class1.CreateRandomCode(ValidCodeLength);//生成隨機(jī)驗證碼
      if (strValidCode == "") return;
      Class1.CreateImage(strValidCode, pbox1);//創(chuàng)建驗證碼圖片
    }
    #endregion


    private void pbox1_Click(object sender, EventArgs e)
    {
      UpdateValidCode();//點擊更新驗證碼
    }


    private void Form1_Load(object sender, EventArgs e)
    {
      UpdateValidCode();//加載更新驗證碼
    }


    /// <summary>
    /// 驗證(區(qū)分大小寫)
    /// </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;//字母個數(shù)
      int Count2 = 0;//數(shù)字個數(shù)

      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//數(shù)字
          {
            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>
    /// 驗證(不區(qū)分大小寫)
    /// </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測試文件下載: ValidCode_jb51.zip

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#多線程之Thread類詳解

    C#多線程之Thread類詳解

    這篇文章主要為大家詳細(xì)介紹了C#多線程之Thread類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • C#使用GET、POST請求獲取結(jié)果

    C#使用GET、POST請求獲取結(jié)果

    這篇文章主要以一個簡單的用戶登陸為例,詳細(xì)介紹了C#使用GET、POST請求獲取結(jié)果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • C# 線程安全詳解

    C# 線程安全詳解

    這篇文章主要介紹了c# 線程安全的用法原理及使用示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下,希望能夠給你帶來幫助
    2021-09-09
  • C#調(diào)用接口的四種方式介紹

    C#調(diào)用接口的四種方式介紹

    這篇文章介紹了C#調(diào)用接口的四種方式,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • XAML如何獲取元素的位置

    XAML如何獲取元素的位置

    這篇文章主要為大家詳細(xì)介紹了XAML如何獲取元素的位置,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • C#判斷程序是否是管理員權(quán)限運行的方法代碼示例

    C#判斷程序是否是管理員權(quán)限運行的方法代碼示例

    這篇文章主要介紹了C#判斷程序是否是管理員權(quán)限運行的方法代碼示例,本文直接給出實現(xiàn)代碼例子,需要的朋友可以參考下
    2015-03-03
  • Unity3D 計時器的實現(xiàn)代碼(三種寫法總結(jié))

    Unity3D 計時器的實現(xiàn)代碼(三種寫法總結(jié))

    這篇文章主要介紹了Unity3D 計時器的實現(xiàn)代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C# WinForm中禁止改變窗口大小的方法

    C# WinForm中禁止改變窗口大小的方法

    這篇文章主要介紹了C# WinForm中禁止改變窗口大小的方法,需要把FormBorderStyle和MaximizeBox的值固定即可,需要的朋友可以參考下
    2014-08-08
  • C#導(dǎo)出數(shù)據(jù)到CSV文件的通用類實例

    C#導(dǎo)出數(shù)據(jù)到CSV文件的通用類實例

    這篇文章主要介紹了C#導(dǎo)出數(shù)據(jù)到CSV文件的通用類,將C#操作CSV文件的常用技巧封裝進(jìn)一個通用類中以方便調(diào)用,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C#實現(xiàn)終止正在執(zhí)行的線程

    C#實現(xiàn)終止正在執(zhí)行的線程

    這篇文章主要介紹了C#實現(xiàn)終止正在執(zhí)行的線程的方法,針對臨界資源等容易出現(xiàn)錯誤的地方進(jìn)行了分析,并提出了改進(jìn)方案與實例,需要的朋友可以參考下
    2014-09-09

最新評論

浏阳市| 抚松县| 襄樊市| 乌什县| 叙永县| 高淳县| 临武县| 平山县| 和龙市| 股票| 上栗县| 彩票| 白银市| 七台河市| 麻阳| 临武县| 灵川县| 汽车| 高州市| 石屏县| 奇台县| 调兵山市| 黄冈市| 长治县| 台湾省| 甘孜县| 霍山县| 惠州市| 临朐县| 双城市| 揭东县| 登封市| 蓝田县| 阳谷县| 库伦旗| 阳朔县| 镇江市| 弥勒县| 瑞安市| 宁河县| 三亚市|