以 下是一个验证码类源代码,使用方法:建立一个ValidateImg.aspx,后台代码里写:ValidateImage img = new ValidateImage();验证的地方:ValidateImage.Validate(txtCode.Text.Trim())
///
<summary>
/// 验证码类
/// </summary>
public class ValidateImage
{
/// <summary>
/// 要显示的文字
/// </summary>
public string Text
{
get { return this .text; }
}
/// <summary>
/// 图片
/// </summary>
public Bitmap Image
{
get { return this .image; }
}
/// <summary>
/// 宽度
/// </summary>
public int Width
{
get { return this .width; }
}
/// <summary>
/// 高度
/// </summary>
public int Height
{
get { return this .height; }
}
private string text;
private int width;
private int height;
private Bitmap image;
private static byte [] randb = new byte [ 4 ];
private static Random rand = new Random();
public ValidateImage()
{
text = rand.Next( 1000 , 9999 ).ToString();
System.Web.HttpContext.Current.Session[ " CheckCode " ] = text;
this .width = ( int )Math.Ceiling(text.Length * 16.5 );
this .height = 30 ;
GenerateImage();
System.Web.HttpContext.Current.Response.ContentType = " image/pjpeg " ;
Image.Save(System.Web.HttpContext.Current.Response.OutputStream, ImageFormat.Jpeg);
}
public static bool Validate( string input)
{
return System.Web.HttpContext.Current.Session[ " CheckCode " ] != null && System.Web.HttpContext.Current.Session[ " CheckCode " ].ToString().Equals(input);
}
~ ValidateImage()
{
Dispose( false );
}
public void Dispose()
{
GC.SuppressFinalize( this );
this .Dispose( true );
}
protected virtual void Dispose( bool disposing)
{
if (disposing)
this .image.Dispose();
}
private FontFamily[] fonts = {
new FontFamily( " Times New Roman " ),
new FontFamily( " Georgia " ),
new FontFamily( " Arial " ),
new FontFamily( " Comic Sans MS " )
};
public int Next( int max)
{
return rand.Next(max);
}
/// <summary>
/// 生成验证码图片
/// </summary>
private void GenerateImage()
{
Bitmap bitmap = new Bitmap( this .width, this .height, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bitmap);
Rectangle rect = new Rectangle( 0 , 0 , this .width, this .height);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.Clear(Color.White);
// int emSize = Next(3) + 15; // (int)((this.width - 20) * 2 / text.Length);
// int emSize = (int)((this.width - 20) * 2 / text.Length);
int emSize = 12 ;
FontFamily family = fonts[Next(fonts.Length - 1 )];
Font font = new Font(family, emSize, FontStyle.Bold);
SizeF measured = new SizeF( 0 , 0 );
SizeF workingSize = new SizeF( this .width, this .height);
while (emSize > 2 && (measured = g.MeasureString(text, font)).Width > workingSize.Width || measured.Height > workingSize.Height)
{
font.Dispose();
font = new Font(family, emSize -= 2 );
}
SolidBrush drawBrush = new SolidBrush(Color.FromArgb(Next( 100 ), Next( 80 ), Next( 80 )));
for ( int x = 0 ; x < 1 ; x ++ )
{
Pen linePen = new Pen(Color.FromArgb(Next( 150 ), Next( 100 ), Next( 100 )), 1 );
g.DrawLine(linePen, new PointF( 0.0F + Next( 2 ), 0.0F + Next( this .height)), new PointF( 0.0F + Next( this .width), 0.0F + Next( this .height - 10 )));
}
for ( int x = 0 ; x < this .text.Length; x ++ )
{
drawBrush.Color = Color.FromArgb(Next( 150 ) + 20 , Next( 150 ) + 20 , Next( 150 ) + 20 );
PointF drawPoint = new PointF( 0.0F + Next( 5 ) + x * 15 , 2.0F + Next( 4 ));
g.DrawString( this .text[x].ToString(), font, drawBrush, drawPoint);
}
double distort = rand.Next( 5 , 10 ) * (Next( 10 ) == 1 ? 1 : - 1 );
using (Bitmap copy = (Bitmap)bitmap.Clone())
{
for ( int y = 0 ; y < height; y ++ )
{
for ( int x = 0 ; x < width; x ++ )
{
int newX = ( int )(x + (distort * Math.Sin(Math.PI * y / 84.0 )));
int newY = ( int )(y + (distort * Math.Cos(Math.PI * x / 54.0 )));
if (newX < 0 || newX >= width) newX = 0 ;
if (newY < 0 || newY >= height) newY = 0 ;
bitmap.SetPixel(x, y, copy.GetPixel(newX, newY));
}
}
}
// g.DrawRectangle(new Pen(Color.Silver), 0, 0, bitmap.Width - 1, bitmap.Height - 1);
font.Dispose();
drawBrush.Dispose();
g.Dispose();
this .image = bitmap;
}
}
/// 验证码类
/// </summary>
public class ValidateImage
{
/// <summary>
/// 要显示的文字
/// </summary>
public string Text
{
get { return this .text; }
}
/// <summary>
/// 图片
/// </summary>
public Bitmap Image
{
get { return this .image; }
}
/// <summary>
/// 宽度
/// </summary>
public int Width
{
get { return this .width; }
}
/// <summary>
/// 高度
/// </summary>
public int Height
{
get { return this .height; }
}
private string text;
private int width;
private int height;
private Bitmap image;
private static byte [] randb = new byte [ 4 ];
private static Random rand = new Random();
public ValidateImage()
{
text = rand.Next( 1000 , 9999 ).ToString();
System.Web.HttpContext.Current.Session[ " CheckCode " ] = text;
this .width = ( int )Math.Ceiling(text.Length * 16.5 );
this .height = 30 ;
GenerateImage();
System.Web.HttpContext.Current.Response.ContentType = " image/pjpeg " ;
Image.Save(System.Web.HttpContext.Current.Response.OutputStream, ImageFormat.Jpeg);
}
public static bool Validate( string input)
{
return System.Web.HttpContext.Current.Session[ " CheckCode " ] != null && System.Web.HttpContext.Current.Session[ " CheckCode " ].ToString().Equals(input);
}
~ ValidateImage()
{
Dispose( false );
}
public void Dispose()
{
GC.SuppressFinalize( this );
this .Dispose( true );
}
protected virtual void Dispose( bool disposing)
{
if (disposing)
this .image.Dispose();
}
private FontFamily[] fonts = {
new FontFamily( " Times New Roman " ),
new FontFamily( " Georgia " ),
new FontFamily( " Arial " ),
new FontFamily( " Comic Sans MS " )
};
public int Next( int max)
{
return rand.Next(max);
}
/// <summary>
/// 生成验证码图片
/// </summary>
private void GenerateImage()
{
Bitmap bitmap = new Bitmap( this .width, this .height, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(bitmap);
Rectangle rect = new Rectangle( 0 , 0 , this .width, this .height);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.Clear(Color.White);
// int emSize = Next(3) + 15; // (int)((this.width - 20) * 2 / text.Length);
// int emSize = (int)((this.width - 20) * 2 / text.Length);
int emSize = 12 ;
FontFamily family = fonts[Next(fonts.Length - 1 )];
Font font = new Font(family, emSize, FontStyle.Bold);
SizeF measured = new SizeF( 0 , 0 );
SizeF workingSize = new SizeF( this .width, this .height);
while (emSize > 2 && (measured = g.MeasureString(text, font)).Width > workingSize.Width || measured.Height > workingSize.Height)
{
font.Dispose();
font = new Font(family, emSize -= 2 );
}
SolidBrush drawBrush = new SolidBrush(Color.FromArgb(Next( 100 ), Next( 80 ), Next( 80 )));
for ( int x = 0 ; x < 1 ; x ++ )
{
Pen linePen = new Pen(Color.FromArgb(Next( 150 ), Next( 100 ), Next( 100 )), 1 );
g.DrawLine(linePen, new PointF( 0.0F + Next( 2 ), 0.0F + Next( this .height)), new PointF( 0.0F + Next( this .width), 0.0F + Next( this .height - 10 )));
}
for ( int x = 0 ; x < this .text.Length; x ++ )
{
drawBrush.Color = Color.FromArgb(Next( 150 ) + 20 , Next( 150 ) + 20 , Next( 150 ) + 20 );
PointF drawPoint = new PointF( 0.0F + Next( 5 ) + x * 15 , 2.0F + Next( 4 ));
g.DrawString( this .text[x].ToString(), font, drawBrush, drawPoint);
}
double distort = rand.Next( 5 , 10 ) * (Next( 10 ) == 1 ? 1 : - 1 );
using (Bitmap copy = (Bitmap)bitmap.Clone())
{
for ( int y = 0 ; y < height; y ++ )
{
for ( int x = 0 ; x < width; x ++ )
{
int newX = ( int )(x + (distort * Math.Sin(Math.PI * y / 84.0 )));
int newY = ( int )(y + (distort * Math.Cos(Math.PI * x / 54.0 )));
if (newX < 0 || newX >= width) newX = 0 ;
if (newY < 0 || newY >= height) newY = 0 ;
bitmap.SetPixel(x, y, copy.GetPixel(newX, newY));
}
}
}
// g.DrawRectangle(new Pen(Color.Silver), 0, 0, bitmap.Width - 1, bitmap.Height - 1);
font.Dispose();
drawBrush.Dispose();
g.Dispose();
this .image = bitmap;
}
}