ASP.NET Core MVC 验证码

https://www.cnblogs.com/yu-shang/p/10623188.html

1、复制下列代码,拷贝到控制器中。

#region 生成验证码图片

// [OutputCache(Location = OutputCacheLocation.None, Duration = 0, NoStore = false)]

public ActionResult SecurityCode()

{

string oldcode = Session["SecurityCode"] as string;

string code = CreateRandomCode(5);

Session["SecurityCode"] = code;

return File(CreateValidateGraphic(code), "image/Jpeg");

}

private byte[] CreateImage(string checkCode)

{

int iwidth = (int)(checkCode.Length * 12);

System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20);

Graphics g = Graphics.FromImage(image);

Font f = new System.Drawing.Font("Arial", 10, System.Drawing.FontStyle.Bold);

Brush b = new System.Drawing.SolidBrush(Color.White);

g.Clear(Color.Blue);

g.DrawString(checkCode, f, b, 3, 3);

Pen blackPen = new Pen(Color.Black, 0);

Random rand = new Random();

for (int i = 0; i < 5; i++)

{

int x1 = rand.Next(image.Width);

int x2 = rand.Next(image.Width);

int y1 = rand.Next(image.Height);

int y2 = rand.Next(image.Height);

g.DrawLine(new Pen(Color.Silver, 1), x1, y1, x2, y2);

}

System.IO.MemoryStream ms = new System.IO.MemoryStream();

image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

return ms.ToArray();

}

private string CreateRandomCode(int codeCount)

{

string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z";

string[] allCharArray = allChar.Split(',');

string randomCode = "";

int temp = -1;

Random rand = new Random();

for (int i = 0; i < codeCount; i++)

{

if (temp != -1)

{

rand = new Random(i * temp * ((int)DateTime.Now.Ticks));

}

int t = rand.Next(35);

if (temp == t)

{

return CreateRandomCode(codeCount);

}

temp = t;

randomCode += allCharArray[t];

}

return randomCode;

}

/// <summary>

/// 创建验证码的图片

/// </summary>

public byte[] CreateValidateGraphic(string validateCode)

{

Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 16.0), 27);

Graphics g = Graphics.FromImage(image);

try

{

//生成随机生成器

Random random = new Random();

//清空图片背景色

g.Clear(Color.White);

//画图片的干扰线

for (int i = 0; i < 25; i++)

{

int x1 = random.Next(image.Width);

int x2 = random.Next(image.Width);

int y1 = random.Next(image.Height);

int y2 = random.Next(image.Height);

g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);

}

Font font = new Font("Arial", 13, (FontStyle.Bold | FontStyle.Italic));

LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),

Color.Blue, Color.DarkRed, 1.2f, true);

g.DrawString(validateCode, font, brush, 3, 2);

//画图片的前景干扰点

for (int i = 0; i < 100; i++)

{

int x = random.Next(image.Width);

int y = random.Next(image.Height);

image.SetPixel(x, y, Color.FromArgb(random.Next()));

}

//画图片的边框线

g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);

//保存图片数据

MemoryStream stream = new MemoryStream();

image.Save(stream, ImageFormat.Jpeg);

//输出图片流

return stream.ToArray();

}

finally

{

g.Dispose();

image.Dispose();

}

}

#endregion

2、复制以下图片标记到视图中

<img src="/控制器的名字/SecurityCode" onclick="this.src+='?new Date()'" />

3、验证方式,使用 Session["SecurityCode"] 判断填写的是否相等。