一、功能界面

图1 验证码(区分大小写)
二、创建一个产生验证码的类Class1
(1)生成随机验证码字符串,用的是Random随机函数
(2)创建验证码图片,将该字符串画在PictureBox控件中
Class1.cs:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111using 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);//验证码图片—长和宽 //创建绘图对象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:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140using 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测试文件下载: ValidCode_jb51.zip
参考文章:
https://www.jianshu.com/p/d89f22cf51bf
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持靠谱客。
最后
以上就是甜美鱼最近收集整理的关于C# WinForm 登录界面的图片验证码(区分大小写+不区分大小写)的全部内容,更多相关C#内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复