C#生成验证码实例

时间:2024-07-03 13:34:56

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

/// <summary>
/// 生成内存位图
/// </summary>
/// <param name="Code"></param>
/// <returns></returns>
public static Bitmap GetCode(out string Code)
{
int imgWidth = ;
int imgHeight = ;
//获取随机字符
Code = DateTimeHelper.GetCode_Ran();
//颜色列表,用于验证码、噪线、噪点
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 = ; i < ; 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 = ; i < Code.Length; i++)
{
string fnt = font[rnd.Next(font.Length)];
Font ft = new Font(fnt, );
Color clr = color[rnd.Next(color.Length)];
g.DrawString(Code[i].ToString(), ft, new SolidBrush(clr), (float)i * , (float));
}
//画噪点
for (int i = ; i < ; 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();
}

C#生成验证码实例