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 @ 2016-09-25 13:02  天马3798  阅读(1861)  评论(0编辑  收藏  举报