简单C#、asp.net mvc验证码的实现

2020-12-26 12:27

阅读:713

标签:rand   内存   generic   rem   ace   byte   width   rect   fun   

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text;
using System.Drawing;
using System.IO;

namespace 验证码的实现.ValidateCode
{
/// 
/// 验证码生成工具类
/// 
///

 
public class ValidateCodeHelper
{
private static Random rand = new Random();
private static string code;
/// 
/// 随机生成指定长度的验证码
/// 
/// 
/// 
public static string GetCode(int length) {

string codes = "AaBbCcDdEeFfJjHhIiJjKkMmNnPpQrRSsTtUuVvWwXxYyZz0123456789";



StringBuilder sb = new StringBuilder();
for (int i = 0; i )
{
int index=rand.Next(codes.Length);
if (sb.ToString().Contains(codes[index])) {

i--;
continue;
}
sb.Append(codes[index]);
}
code = sb.ToString();
return code;

}

/// 
/// 获取随机颜色
/// 
/// 
private static Color GetRandomColor() {


int red = rand.Next(10, 255);
int green = rand.Next(10, 255);
int blue = rand.Next(10, 255);

return Color.FromArgb(red, green, blue);
}

 

/// 
/// 生成验证码
/// 
/// 
public static byte[] ValidateCode(string code) {

Bitmap img = new Bitmap(100,30);
Graphics g = Graphics.FromImage(img);
g.FillRectangle(Brushes.White, 0, 0, img.Width, img.Height);
g.DrawRectangle(new Pen(Color.Black), 1, 1, img.Width-2, img.Height-2);
Brush bush = new SolidBrush(Color.SteelBlue);
g.DrawString(code, new Font("黑体", 20, FontStyle.Italic), bush, 10, 2);
Random r = new Random();
//画线条
for (int i = 0; i 5; i++)
{
g.DrawLine(new Pen(GetRandomColor()), r.Next(img.Width), r.Next(img.Height), r.Next(img.Width), r.Next(img.Height));
}
//画躁点
for (int i = 0; i 100; i++)
{
img.SetPixel(r.Next(img.Width), r.Next(img.Height), GetRandomColor());
}
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

byte[] data = ms.GetBuffer();
g.Dispose();
ms.Close();
return data;
}

 

/// 
/// 生成验证码
/// 
/// 验证码
/// 验证码颜色
/// 
public static byte[] ValidateCode(string code,Color fontColor) {

Bitmap img = new Bitmap(100,30);
Graphics g = Graphics.FromImage(img);

g.FillRectangle(Brushes.White,0, 0, img.Width, img.Height);

Brush bush = new SolidBrush(fontColor);
g.DrawString(code, new Font("黑体", 20, FontStyle.Italic), bush, 10, 2);
Random r = new Random();
//画线条
for (int i = 0; i 5; i++)
{
g.DrawLine(new Pen(GetRandomColor()), r.Next(img.Width), r.Next(img.Height), r.Next(img.Width), r.Next(img.Height));
}
//画躁点
for (int i = 0; i 100; i++)
{
img.SetPixel(r.Next(img.Width), r.Next(img.Height), GetRandomColor());
}
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

byte[] data = ms.GetBuffer();
g.Dispose();
ms.Close();
return data;
}
/// 
/// 生成验证码
/// 
/// 验证码
/// 验证码颜色
/// 验证码背景颜色
/// 
public static byte[] ValidateCode(string code,Color backgroundColor, Color fontColor)
{

Bitmap img = new Bitmap(100, 30);
Graphics g = Graphics.FromImage(img);
Brush bush1 = new SolidBrush(backgroundColor);
g.FillRectangle(bush1, 0, 0, img.Width, img.Height);
Brush bush = new SolidBrush(fontColor);
g.DrawString(code, new Font("黑体", 20, FontStyle.Italic), bush, 10, 2);
Random r = new Random();
//画线条
for (int i = 0; i 5; i++)
{
g.DrawLine(new Pen(GetRandomColor()), r.Next(img.Width), r.Next(img.Height), r.Next(img.Width), r.Next(img.Height));
}
//画躁点
for (int i = 0; i 100; i++)
{
img.SetPixel(r.Next(img.Width), r.Next(img.Height), GetRandomColor());
}
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

byte[] data = ms.GetBuffer();
g.Dispose();
ms.Close();
return data;
}

/// 
/// 判断验证码是否正确
/// 
/// 
/// 
public static bool IsValidate(string Code) {

if (string.IsNullOrEmpty(Code)||!code.ToLower().Equals(Code.ToLower())) {

return false;
}

return true;
}
}
}

 

在控制器中的调用

public ActionResult ValidateCode(){


//获取指定长度验证码

string code= ValidateCodeHelper.GetCode(5);
TempData["code"] = code;//存储验证码用于验证

//将验证码绘制到图片上、保存到内存流中并返回字节数组
byte[] data= ValidateCodeHelper.ValidateCode(code);

return File(data,"image/jpeg");
}

 

在前端的调用

"post" action="/Home/Login">
验证码: "/Home/ValidateCode" style="cursor:pointer" onclick="this.src =this.src+‘?‘" /> "javascript:void(0)" onclick="change()">换一张
输入验证码: "text" name="code"/>
"submit" value="提交"/>

 

简单C#、asp.net mvc验证码的实现

标签:rand   内存   generic   rem   ace   byte   width   rect   fun   

原文地址:https://www.cnblogs.com/shijiehaiyang/p/13375607.html

上一篇:windy数

下一篇:Windows故障解决


评论


亲,登录后才可以留言!