using
System;
using System.Web;
using System.Drawing;
namespace Beasyer.Lib
... {
/**//// <summary>
/// 生成验证码的方法
/// </summary>
/// <example>
/// Session["VerifyCode"] = VerifyCode.Generate(10);
/// VerifyCode.WriteToOutput(Session["VerifyCode"].ToString(), this.Response);
/// 验证:
/// if(this.TextBox1.Text == Session["VerifyCode"].ToString())
/// this.Literal1.Text = "验证成功!";
/// else
/// this.Literal1.Text = "验证失败!";
/// </example>
public static class VerifyCode
...{
/**//// <summary>
/// 获取指定长度的随机字符串
/// </summary>
/// <param name="length">字符串的长度</param>
/// <returns></returns>
public static string Generate(int length)
...{
string s = "ABCDEFGHJKLMNOPQRSTUVWXYZ0123456789";//0123456789";
System.Text.StringBuilder sb = new System.Text.StringBuilder(length);
Random r = new Random();
for (int i = 0; i < length; i++)
...{
sb.Append(s[r.Next(0, s.Length)]);
}
return sb.ToString();
}
/**//// <summary>
/// 在HttpResponse中写出指定字符的图片格式
/// </summary>
/// <param name="verifyCode"></param>
/// <param name="response"></param>
public static void WriteToOutput(string verifyCode, HttpResponse response)
...{
int fontSize;
fontSize = 10; //字体大小
System.Drawing.Bitmap bitmap = new Bitmap(verifyCode.Length * (fontSize + 1), 24);
Graphics g = Graphics.FromImage(bitmap);
Font f = new System.Drawing.Font("Arial", fontSize);
Brush b = new System.Drawing.SolidBrush(Color.White);
//Brush b = new System.Drawing.SolidBrush(Color.Black); //颜色
g.Clear(Color.Black);
//g.Clear(Color.Yellow); 背景颜色
Random r = new Random();
for (int i = 0; i < verifyCode.Length; i++)
...{
g.DrawString(verifyCode[i].ToString(), f, b, 11 * i, r.Next(0, 10));
}
// bitmap = TwistImage(bitmap);
bitmap = AddNoisePointToImage(bitmap);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
response.ClearContent();
response.ContentType = "image/Jpeg";
response.BinaryWrite(ms.ToArray());
g.Dispose();
bitmap.Dispose();
}
private static Bitmap TwistImage(Bitmap bitmap)
...{
Bitmap bitmapret = new Bitmap(bitmap);
Graphics g = Graphics.FromImage(bitmapret);
g.Clear(Color.Blue);
bitmapret = AddNoiseLineToImage(bitmapret);//在这里加噪音弧线可以保证其不影响人对验证码的识别
Random r = new Random();
double k = Convert.ToDouble(r.Next(0, 4));
try
...{
for (int j = 0; j < bitmapret.Width; j++)
...{
int offset = Convert.ToInt32(Math.Sin(Convert.ToDouble(j) / 20 + k) * 10);
for (int i = bitmapret.Height - 10; i > 10; i--)
if (i + offset >= 0 && i + offset < bitmapret.Height)
bitmapret.SetPixel(j, i + offset, bitmap.GetPixel(j, i));
}
return bitmapret;
}
catch (Exception)
...{
throw;
}
}
private static Bitmap AddNoiseLineToImage(Bitmap bitmap)//加线
...{
Random r = new Random();
for (int i = 0; i < bitmap.Width * bitmap.Height / 200; i++)
...{
Point point = new Point(r.Next(1, bitmap.Width), r.Next(1, bitmap.Height));
Size size = new Size(r.Next(10, 20), r.Next(10, 20));
int startAngle = r.Next(0, 360);
int sweepAngle = r.Next(startAngle, startAngle + r.Next(60, 180));
Pen pen = new Pen(Color.FromArgb(r.Next(204, 255), r.Next(204, 255), r.Next(204, 255)), (float)1);
Graphics g = Graphics.FromImage(bitmap);
g.DrawArc(pen, new Rectangle(point, size), startAngle, sweepAngle);
g.Dispose();
}
return bitmap;
}
private static Bitmap AddNoisePointToImage(Bitmap bitmap)//加点
...{
Random r = new Random();
for (int num1 = 0; num1 < (bitmap.Height - 1); num1++)
...{
for (int num2 = 0; num2 < (bitmap.Width - 1); num2++)
...{
Color color1 = bitmap.GetPixel(num2, num1);
if (r.Next(0, 40) == 20)
...{
bitmap.SetPixel(num2, num1, Color.FromArgb(r.Next(204, 255), r.Next(204, 255), r.Next(204, 255)));
}
}
}
return bitmap;
}
}
}
using System.Web;
using System.Drawing;
namespace Beasyer.Lib
... {
/**//// <summary>
/// 生成验证码的方法
/// </summary>
/// <example>
/// Session["VerifyCode"] = VerifyCode.Generate(10);
/// VerifyCode.WriteToOutput(Session["VerifyCode"].ToString(), this.Response);
/// 验证:
/// if(this.TextBox1.Text == Session["VerifyCode"].ToString())
/// this.Literal1.Text = "验证成功!";
/// else
/// this.Literal1.Text = "验证失败!";
/// </example>
public static class VerifyCode
...{
/**//// <summary>
/// 获取指定长度的随机字符串
/// </summary>
/// <param name="length">字符串的长度</param>
/// <returns></returns>
public static string Generate(int length)
...{
string s = "ABCDEFGHJKLMNOPQRSTUVWXYZ0123456789";//0123456789";
System.Text.StringBuilder sb = new System.Text.StringBuilder(length);
Random r = new Random();
for (int i = 0; i < length; i++)
...{
sb.Append(s[r.Next(0, s.Length)]);
}
return sb.ToString();
}
/**//// <summary>
/// 在HttpResponse中写出指定字符的图片格式
/// </summary>
/// <param name="verifyCode"></param>
/// <param name="response"></param>
public static void WriteToOutput(string verifyCode, HttpResponse response)
...{
int fontSize;
fontSize = 10; //字体大小
System.Drawing.Bitmap bitmap = new Bitmap(verifyCode.Length * (fontSize + 1), 24);
Graphics g = Graphics.FromImage(bitmap);
Font f = new System.Drawing.Font("Arial", fontSize);
Brush b = new System.Drawing.SolidBrush(Color.White);
//Brush b = new System.Drawing.SolidBrush(Color.Black); //颜色
g.Clear(Color.Black);
//g.Clear(Color.Yellow); 背景颜色
Random r = new Random();
for (int i = 0; i < verifyCode.Length; i++)
...{
g.DrawString(verifyCode[i].ToString(), f, b, 11 * i, r.Next(0, 10));
}
// bitmap = TwistImage(bitmap);
bitmap = AddNoisePointToImage(bitmap);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
response.ClearContent();
response.ContentType = "image/Jpeg";
response.BinaryWrite(ms.ToArray());
g.Dispose();
bitmap.Dispose();
}
private static Bitmap TwistImage(Bitmap bitmap)
...{
Bitmap bitmapret = new Bitmap(bitmap);
Graphics g = Graphics.FromImage(bitmapret);
g.Clear(Color.Blue);
bitmapret = AddNoiseLineToImage(bitmapret);//在这里加噪音弧线可以保证其不影响人对验证码的识别
Random r = new Random();
double k = Convert.ToDouble(r.Next(0, 4));
try
...{
for (int j = 0; j < bitmapret.Width; j++)
...{
int offset = Convert.ToInt32(Math.Sin(Convert.ToDouble(j) / 20 + k) * 10);
for (int i = bitmapret.Height - 10; i > 10; i--)
if (i + offset >= 0 && i + offset < bitmapret.Height)
bitmapret.SetPixel(j, i + offset, bitmap.GetPixel(j, i));
}
return bitmapret;
}
catch (Exception)
...{
throw;
}
}
private static Bitmap AddNoiseLineToImage(Bitmap bitmap)//加线
...{
Random r = new Random();
for (int i = 0; i < bitmap.Width * bitmap.Height / 200; i++)
...{
Point point = new Point(r.Next(1, bitmap.Width), r.Next(1, bitmap.Height));
Size size = new Size(r.Next(10, 20), r.Next(10, 20));
int startAngle = r.Next(0, 360);
int sweepAngle = r.Next(startAngle, startAngle + r.Next(60, 180));
Pen pen = new Pen(Color.FromArgb(r.Next(204, 255), r.Next(204, 255), r.Next(204, 255)), (float)1);
Graphics g = Graphics.FromImage(bitmap);
g.DrawArc(pen, new Rectangle(point, size), startAngle, sweepAngle);
g.Dispose();
}
return bitmap;
}
private static Bitmap AddNoisePointToImage(Bitmap bitmap)//加点
...{
Random r = new Random();
for (int num1 = 0; num1 < (bitmap.Height - 1); num1++)
...{
for (int num2 = 0; num2 < (bitmap.Width - 1); num2++)
...{
Color color1 = bitmap.GetPixel(num2, num1);
if (r.Next(0, 40) == 20)
...{
bitmap.SetPixel(num2, num1, Color.FromArgb(r.Next(204, 255), r.Next(204, 255), r.Next(204, 255)));
}
}
}
return bitmap;
}
}
}
使用实例:
代码中也有注明
Session[
"
VerifyCode
"
]
=
VerifyCode.Generate(
10
);
VerifyCode.WriteToOutput(Session[ " VerifyCode " ].ToString(), this .Response);
// 验证:
if ( this .TextBox1.Text == Session[ " VerifyCode " ].ToString())
this .Literal1.Text = " 验证成功! " ;
else
this .Literal1.Text = " 验证失败! " ;
VerifyCode.WriteToOutput(Session[ " VerifyCode " ].ToString(), this .Response);
// 验证:
if ( this .TextBox1.Text == Session[ " VerifyCode " ].ToString())
this .Literal1.Text = " 验证成功! " ;
else
this .Literal1.Text = " 验证失败! " ;