C#生成验证码实例

常用生成验证码实例封装:

复制代码
/// <summary>
/// 生成内存位图
/// </summary>
/// <param name="Code"></param>
/// <returns></returns>
public static Bitmap GetCode(out string Code)
{
    int imgWidth = 80;
    int imgHeight = 40;
    //获取随机字符
    Code = DateTimeHelper.GetCode_Ran(4);
    //颜色列表,用于验证码、噪线、噪点 
    Color[] color = { Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.Brown, Color.DarkBlue };
    //字体列表,用于验证码 
    string[] font = { "Times New Roman", "MS Mincho", "Book Antiqua", "Gungsuh", "PMingLiU", "Impact" };

    Bitmap bmp = new Bitmap(imgWidth, imgHeight);
    Graphics g = Graphics.FromImage(bmp);
    g.Clear(Color.White);
    Random rnd = new Random();
    //画噪线 
    for (int i = 0; i < 10; i++)
    {
        int x1 = rnd.Next(imgWidth);
        int y1 = rnd.Next(imgHeight);
        int x2 = rnd.Next(imgWidth);
        int y2 = rnd.Next(imgHeight);
        Color clr = color[rnd.Next(color.Length)];
        g.DrawLine(new Pen(clr), x1, y1, x2, y2);
    }
    //画验证码字符串 
    for (int i = 0; i < Code.Length; i++)
    {
        string fnt = font[rnd.Next(font.Length)];
        Font ft = new Font(fnt, 18);
        Color clr = color[rnd.Next(color.Length)];
        g.DrawString(Code[i].ToString(), ft, new SolidBrush(clr), (float)i * 19, (float)8);
    }
    //画噪点 
    for (int i = 0; i < 100; i++)
    {
        int x = rnd.Next(bmp.Width);
        int y = rnd.Next(bmp.Height);
        Color clr = color[rnd.Next(color.Length)];
        bmp.SetPixel(x, y, clr);
    }
    //显式释放资源 
    // bmp.Dispose();
    g.Dispose();
    return bmp;
}
/// <summary>
/// 生成位图,输出到响应流
/// </summary>
/// <param name="Response"></param>
/// <param name="Code"></param>
public static void GetCode(HttpResponseBase Response, out string Code)
{
    Code = string.Empty;
    Bitmap bit = GetCode(out Code);

    ////清除该页输出缓存,设置该页无缓存 
    //Response.Buffer = true;
    //Response.ExpiresAbsolute = DateTime.Now.AddMilliseconds(0);
    //Response.Expires = 0;
    //Response.CacheControl = "no-cache";
    //Response.AppendHeader("Pragma", "No-Cache");

    Response.ClearContent();
    bit.Save(Response.OutputStream, ImageFormat.Png);
    Response.ContentType = "image/png";

    //释放资源
    bit.Dispose();
}
复制代码

posted @   天马3798  阅读(1861)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示