在.NET中新建一个Web项目,添加一个.ASPX页面,取名VerifyCode.aspx, 转到其代码编辑状态,将下面的代码Copy&Paste过去就可以用了,有什么意见或问题欢迎提出^@^
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Drawing.Imaging;
using System.Drawing.Text;

namespace VerifyCode


{

/**//// <summary>
/// 页面验证码程序
/// 使用:在页面中加入HTML代码 <img src="VerifyCode.aspx">
/// </summary>
public class VerifyCode : System.Web.UI.Page

{


Private Members#region Private Members

static string[] FontItems = new string[]
{ "Arial",
"Helvetica",
"Geneva",
"sans-serif",
"Verdana"
};


static Brush[] BrushItems = new Brush[]
{ Brushes.OliveDrab,
Brushes.ForestGreen,
Brushes.DarkCyan,
Brushes.LightSlateGray,
Brushes.RoyalBlue,
Brushes.SlateBlue,
Brushes.DarkViolet,
Brushes.MediumVioletRed,
Brushes.IndianRed,
Brushes.Firebrick,
Brushes.Chocolate,
Brushes.Peru,
Brushes.Goldenrod
};


static string[] BrushName = new string[]
{ "OliveDrab",
"ForestGreen",
"DarkCyan",
"LightSlateGray",
"RoyalBlue",
"SlateBlue",
"DarkViolet",
"MediumVioletRed",
"IndianRed",
"Firebrick",
"Chocolate",
"Peru",
"Goldenrod"
};

private static Color BackColor = Color.White;
private static Pen BorderColor = Pens.DarkGray;
private static int Width = 52;
private static int Height = 21;

private Random _random;
private string _code;
private int _brushNameIndex;
#endregion // end of Private Members



Web Form Designer generated code#region Web Form Designer generated code
override protected void OnInit(EventArgs e)

{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}

/**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()

{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion



PageLoad Event#region PageLoad Event
public void Page_Load(object sender, System.EventArgs e)

{
//
// TODO : initialize
//
this._random = new Random();
this._code = GetRandomCode();

//
// TODO : use Session["code"] save the VerifyCode
//
Session["code"] = this._code;

//
// TODO : output Image
//
this.SetPageNoCache();
this.OnPaint();
}
#endregion // end of PageLoad Event



Helper Methods#region Helper Methods

/**//// <summary>
/// 设置页面不被缓存
/// </summary>
private void SetPageNoCache()

{
Response.Buffer = true;
Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-1);
Response.Expires = 0;
Response.CacheControl = "no-cache";
Response.AppendHeader("Pragma","No-Cache");
}


/**//// <summary>
/// 取得一个 4 位的随机码
/// </summary>
/// <returns></returns>
private string GetRandomCode()

{
return Guid.NewGuid().ToString().Substring(0, 4);
}


/**//// <summary>
/// 随机取一个字体
/// </summary>
/// <returns></returns>
private Font GetFont()

{
int fontIndex = _random.Next(0, FontItems.Length);
FontStyle fontStyle = GetFontStyle(_random.Next(0, 2));
return new Font(FontItems[fontIndex], 12, fontStyle);
}


/**//// <summary>
/// 取一个字体的样式
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
private FontStyle GetFontStyle(int index)

{
switch (index)

{
case 0:
return FontStyle.Bold;
case 1:
return FontStyle.Italic;
default:
return FontStyle.Regular;
}
}


/**//// <summary>
/// 随机取一个笔刷
/// </summary>
/// <returns></returns>
private Brush GetBrush()

{
int brushIndex = _random.Next(0, BrushItems.Length);
_brushNameIndex = brushIndex;
return BrushItems[brushIndex];
}
#endregion // end of Helper Methods



Paint Methods#region Paint Methods

/**//// <summary>
/// 绘画事件
/// </summary>
private void OnPaint()

{
Bitmap objBitmap = null;
Graphics g = null;

try

{
objBitmap = new Bitmap(Width, Height);
g = Graphics.FromImage(objBitmap);

Paint_Background(g);
Paint_Text(g);
Paint_TextStain(objBitmap);
Paint_Border(g);

objBitmap.Save(Response.OutputStream, ImageFormat.Gif);
Response.ContentType = "image/gif";
}

catch
{}
finally

{
if (null != objBitmap)
objBitmap.Dispose();
if (null != g)
g.Dispose();
}
}


/**//// <summary>
/// 绘画背景颜色
/// </summary>
/// <param name="g"></param>
private void Paint_Background(Graphics g)

{
g.Clear(BackColor);
}


/**//// <summary>
/// 绘画边框
/// </summary>
/// <param name="g"></param>
private void Paint_Border(Graphics g)

{
g.DrawRectangle(BorderColor, 0, 0, Width - 1, Height - 1);
}


/**//// <summary>
/// 绘画文字
/// </summary>
/// <param name="g"></param>
private void Paint_Text(Graphics g)

{
g.DrawString(_code, GetFont(), GetBrush(), 3, 1);
}


/**//// <summary>
/// 绘画文字噪音点
/// </summary>
/// <param name="g"></param>
private void Paint_TextStain(Bitmap b)

{
for (int n=0; n<30; n++)

{
int x = _random.Next(Width);
int y = _random.Next(Height);
b.SetPixel(x, y, Color.FromName(BrushName[_brushNameIndex]));
}
}
#endregion // end of Paint Methods


} // end of class

} // end of namespace

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码