看到很多第三方控件,感觉很不错,自己就写了验证码控件,可以自己设置很多属性,大概代码贴出来,要整个代码就给我邮件,很感谢指出不好的地方!
namespace Check_Code
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Drawing.Imaging;
/**//// <summary>
/// 验证码控件
/// </summary>
public class Check_Code : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.Image Image1;
图片私有变量 初始设置#region 图片私有变量 初始设置
//验证码长度
private int length=4;
//图片清晰度
private int fineness=95;
//图片宽度
private int width=60;
//图片高度
private int height=20;
//字体家族名称
private string fontfamily="Verdana";
//字体大小
private int size=12;
//
// //字体颜色
// private string color="Blank";
//字体样式
private int style=3;
//绘制起使坐标X
private int x=0;
//绘制起使坐标Y
private int y=0;
#endregion
图片基本属性#region 图片基本属性
//验证码长度属性
public int Length
{
get{ return length;}
set{ length=value;}
}
//图片清晰度属性
public int Fineness
{
get{ return fineness;}
set{ fineness=value;}
}
//图片宽度属性
public int Width
{
get{return width;}
set{width=value;}
}
//图片高度属性
public int Height
{
get{return height;}
set{height=value;}
}
//字体家族名称
public string FontFamily
{
get{return fontfamily;}
set{fontfamily=value;}
}
//字体大小
public int Size
{
get{return size;}
set{size=value;}
}
// //字体颜色
// public string Color
// {
// get{return color;}
// set{color=value;}
// }
//字体样式
public int Style
{
get{return style;}
set{style=value;}
}
//绘制起使坐标X
public int X
{
get{return x;}
set{x=value;}
}
//绘制起使坐标Y
public int Y
{
get{return y;}
set{y=value;}
}
#endregion
判断符合范围#region 判断符合范围
public void Checked_Or()
{
if(Length>16||Length<4)
{
Response.Write("<script>alert('验证码长度要在4-16之间')</script>");
}
if(Fineness>100||Fineness<0)
{
Response.Write("<script>alert('验证码图片清晰度要在0-100之间')</script>");
}
if(Width>200||Width<20)
{
Response.Write("<script>alert('验证码图片宽度要在20-200px之间')</script>");
}
if(Height>100||Height<10)
{
Response.Write("<script>alert('验证码图片高度要在10-100之间')</script>");
}
if(Size>72||Size<6)
{
Response.Write("<script>alert('验证码字体大小要在6-72之间')</script>");
}
}
#endregion
随机生成字母或数字 并保存到session#region 随机生成字母或数字 并保存到session
public string RandowCode()
{
string randowcode="";
Random rm=new Random();
for(int i=0;i<Length;i++)
{
//A-Z
int n=rm.Next(26);
randowcode+=(char)(n+65);
}
Session.Add("code",randowcode);
return randowcode;
}
#endregion
绘制验证码图片#region 绘制验证码图片
public void DrawCode(Bitmap bt,string Code)
{
//获取绘制器对象 (笔)
Graphics g=Graphics.FromImage(bt);
//绘制字体
Font font=new Font(this.FontFamily,this.Size,GetFontStyle());
//绘制验证码图像
g.DrawString(Code,font,Brushes.Red,X,Y);
//保存验证码图片 准备输出
bt.Save(Server.MapPath("img")+"\\Img.gif",ImageFormat.Gif);
}
#endregion
字体样式#region 字体样式
public FontStyle GetFontStyle()
{
if(this.Style==1)
{
return FontStyle.Bold;
}
else if(this.Style==2)
{
return FontStyle.Italic;
}
else if(this.Style==3)
{
return FontStyle.Bold | FontStyle.Italic;
}
else
{
return FontStyle.Regular;
}
}
#endregion
给图片设置随机干扰#region 给图片设置随机干扰
public void DisturbBitmap(Bitmap bt)
{
Random rm=new Random();
for(int i=0;i<bt.Width;i++)
{
for(int j=0;j<bt.Height;j++)
{
if(rm.Next(100)<this.Fineness)
{
bt.SetPixel(i,j,Color.White);
}
}
}
}
#endregion
private void Page_Load(object sender, System.EventArgs e)
{
//调用判断符合范围函数
Checked_Or();
//返回随机码
string Code=RandowCode();
//生成图片
Bitmap bt=new Bitmap(Width,Height);
//给图片设置干扰
DisturbBitmap(bt);
//绘制验证码图片
DrawCode(bt,Code);
}
Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/**//// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}