//生成运算后的结果值
private static int result = 0;
/// <summary>
/// 生成四则运算公式
/// </summary>
/// <returns></returns>
static string GenerateCaptcha()
{
Random random = new Random();
int num1 = random.Next(1, 10);
int num2 = random.Next(1, 10);
char[] operators = { '+', '-', '×', '÷' };
char op = operators[random.Next(0, operators.Length)];
//num1 = 1; num2 = 3; op = '÷';
switch (op)
{
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '×':
result = num1 * num2;
break;
case '÷':
//var DivisionResult = num1 / num2;
result = num1 / num2;//测试后发现 5/2=2 1/3=0 因为会向下取整;
break;
}
return $" {num1}{op}{num2}=? ";
}
//增加背景糟点
private static void AddNoise(Graphics graphics, Random random, int Width = 80, int Height = 25)
{
int noiseAmount = (Width * Height) / 10;
for (int i = 0; i < noiseAmount; i++)
{
int x = random.Next(Width);
int y = random.Next(Height);
Color randomColor = Color.FromArgb(random.Next(256), random.Next(256), random.Next(256));
graphics.FillEllipse(new SolidBrush(randomColor), x, y, 2, 2);
}
}
/// <summary>
/// 生成四则运算的图形验证码
/// </summary>
void CreateCaptcha()
{
//初始化位图,设定位图大小
Bitmap bitmap = new Bitmap(80, 25);
//自定义颜色列表
List<Color> colors = new List<Color>();
colors.Add(Color.Black);
colors.Add(Color.Red);
colors.Add(Color.Gray);
colors.Add(Color.Blue);
//初始化位图
Graphics gra = Graphics.FromImage(bitmap);
//指定验证码背景
gra.Clear(Color.White);
//增加糟点
Random zdR = new Random();
AddNoise(gra, zdR);
string content = "";
content = GenerateCaptcha();
for (int i = 0; i < content.Length; i++)
{
var str = content[i].ToString();
Thread.Sleep(100);//获取一次后暂停100毫秒,使随机获取的数字不重复;共0.4秒
Matrix matrix = new Matrix();
Random random = new Random();
matrix.Shear(random.Next(-5, 5) / 10f, 0);
gra.Transform = matrix;
//初始化多种颜色画笔
SolidBrush sb = new SolidBrush(colors[random.Next(0, colors.Count)]);
gra.DrawString(str, new Font("宋体", 18f), sb, new PointF(i * 20f, 0f));//初始化坐标时应保持左侧距离
}
Session["czYzm"] = result.ToString();
gra.DrawLine(new Pen(Color.Black), 0, 0, 80, 24);
//将图片保存到内存流
MemoryStream stream = new System.IO.MemoryStream();
bitmap.Save(stream, ImageFormat.Jpeg);
Response.Clear();
Response.ContentType = "image/jpeg";
Response.BinaryWrite(stream.ToArray());
stream.Close();
stream.Dispose();
bitmap.Dispose();
}
c# 四则运算 || 加减乘除 || 图形验证码
最新推荐文章于 2023-07-27 15:17:00 发布