失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C# WinForm 登录界面的图片验证码(区分大小写+不区分大小写)

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

时间:2022-05-06 16:16:12

相关推荐

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

一、功能界面

二、创建一个产生验证码的类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++){//利用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;}/// <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);//验证码图片—长和宽//创建绘图对象GraphicsGraphics 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 ponentModel;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);//创建验证码图片}#endregionprivate 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测试文件下载地址: /i984xva

密码:test

参考文章:

/p/d89f22cf51bf

如果觉得《C# WinForm 登录界面的图片验证码(区分大小写+不区分大小写)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。