9 个解决方案
#1
学习
#2
http://renyu732.cnblogs.com/archive/2005/07/02/185161.html
#3
具体参考
http://singlepine.cnblogs.com/articles/264894.html
原理:在产生验证码的页面的Page_Load中调用产生随机数的函数,并把结果以流的方式输出到页面上,相当于画了个小图片,然后在另一个要使用验证码的页面中有个image,让image的src="ValidateCode.aspx",这样就把验证码以图片的方式显示到image里面去了。
private void Page_Load(object sender, System.EventArgs e)
{
Validate_Code(VNum);//调用产生验证码方法
}
以流方式输出到页面
private void Validate_Code(string VNum)
{
int Gheight=(int)(VNum.Length * 11.5);
//gheight为图片宽度,根据字符长度自动更改图片宽度
System.Drawing.Bitmap Img = new System.Drawing.Bitmap(Gheight,20);
Graphics g = Graphics.FromImage(Img);
g.DrawString(VNum,new System.Drawing.Font("Arial",10),new System.Drawing.SolidBrush(Color.Red),3,3);
//在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y)
System.IO.MemoryStream ms=new System.IO.MemoryStream();
Img.Save(ms,System.Drawing.Imaging.ImageFormat.Png);
Response.ClearContent(); //需要输出图象信息 要修改HTTP头
Response.ContentType="image/Png";
Response.BinaryWrite(ms.ToArray());
g.Dispose();
Img.Dispose();
Response.End();
}
显示到图片上
<IMG alt="" src="ValidateCode.aspx">
http://singlepine.cnblogs.com/articles/264894.html
原理:在产生验证码的页面的Page_Load中调用产生随机数的函数,并把结果以流的方式输出到页面上,相当于画了个小图片,然后在另一个要使用验证码的页面中有个image,让image的src="ValidateCode.aspx",这样就把验证码以图片的方式显示到image里面去了。
private void Page_Load(object sender, System.EventArgs e)
{
Validate_Code(VNum);//调用产生验证码方法
}
以流方式输出到页面
private void Validate_Code(string VNum)
{
int Gheight=(int)(VNum.Length * 11.5);
//gheight为图片宽度,根据字符长度自动更改图片宽度
System.Drawing.Bitmap Img = new System.Drawing.Bitmap(Gheight,20);
Graphics g = Graphics.FromImage(Img);
g.DrawString(VNum,new System.Drawing.Font("Arial",10),new System.Drawing.SolidBrush(Color.Red),3,3);
//在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y)
System.IO.MemoryStream ms=new System.IO.MemoryStream();
Img.Save(ms,System.Drawing.Imaging.ImageFormat.Png);
Response.ClearContent(); //需要输出图象信息 要修改HTTP头
Response.ContentType="image/Png";
Response.BinaryWrite(ms.ToArray());
g.Dispose();
Img.Dispose();
Response.End();
}
显示到图片上
<IMG alt="" src="ValidateCode.aspx">
#4
http://community.csdn.net/Expert/topic/4295/4295800.xml?temp=.3524286
#5
可以随机的在图片上画一些点,或线段,以防止被识别
#6
这种问题在CSDN的论坛里一搜就多的是了!
#7
我的实现方式:
http://blog.csdn.net/guanzhongs/archive/2005/12/29/564796.aspx
http://blog.csdn.net/guanzhongs/archive/2005/12/29/564796.aspx
#8
<tr><TD align=right>驗証碼:
<asp:TextBox id="txtyz" runat="server" BorderColor="#333333" BorderWidth="1px"></asp:TextBox>
<td align=left width=120> <asp:Image id="Image1" runat="server" ImageUrl="YZgif.aspx"></asp:Image></td>
</TD></tr>
YZgif.aspx
<%@ Page Inherits="Exam.Admin.YZgif" Src="YZgif.cs" %>
YZgif.cs
using System;
using System.IO;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace Exam.Admin
{
/// <summary>
/// YZgif 的摘要说明。
/// </summary>
public class YZgif : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Image Image1;
protected System.Web.UI.WebControls.TextBox txtyz;
private void Page_Load(object sender, System.EventArgs e)
{
string VNum = "";
VNum = this.RndNum(4);
Session["VNum"] = VNum;
this.ValidataCode(VNum);
// 在此处放置用户代码以初始化页面
}
#region Web Form Designer generated code
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
public void ValidataCode(string str)
{
System.Drawing.Bitmap Img;
Graphics g;
MemoryStream ms;
int gheight = str.Length*11;
Img = new Bitmap(gheight,20);
g = Graphics.FromImage(Img);
SolidBrush sb = new SolidBrush(Color.DarkSlateBlue);
Font ft = new Font("Arial",10);
g.DrawString(str,ft,sb,3,3);
ms = new MemoryStream();
Img.Save(ms,ImageFormat.Png);
Response.ClearContent();
Response.ContentType = "image/Png";
Response.BinaryWrite(ms.ToArray());
g.Dispose();
Img.Dispose();
Response.End();
}
public string RndNum(int i)
{
string VNum = "";
Random Rnd = new Random();
string Vchar = "0,1,2,3,4,5,6,7,8,9";
string[] Vc = Vchar.Split(',');
for(int k =0;k<i;k++)
{
VNum = VNum + Vc[Rnd.Next(0,9)];
}
return VNum;
}
}
}
<asp:TextBox id="txtyz" runat="server" BorderColor="#333333" BorderWidth="1px"></asp:TextBox>
<td align=left width=120> <asp:Image id="Image1" runat="server" ImageUrl="YZgif.aspx"></asp:Image></td>
</TD></tr>
YZgif.aspx
<%@ Page Inherits="Exam.Admin.YZgif" Src="YZgif.cs" %>
YZgif.cs
using System;
using System.IO;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace Exam.Admin
{
/// <summary>
/// YZgif 的摘要说明。
/// </summary>
public class YZgif : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Image Image1;
protected System.Web.UI.WebControls.TextBox txtyz;
private void Page_Load(object sender, System.EventArgs e)
{
string VNum = "";
VNum = this.RndNum(4);
Session["VNum"] = VNum;
this.ValidataCode(VNum);
// 在此处放置用户代码以初始化页面
}
#region Web Form Designer generated code
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
public void ValidataCode(string str)
{
System.Drawing.Bitmap Img;
Graphics g;
MemoryStream ms;
int gheight = str.Length*11;
Img = new Bitmap(gheight,20);
g = Graphics.FromImage(Img);
SolidBrush sb = new SolidBrush(Color.DarkSlateBlue);
Font ft = new Font("Arial",10);
g.DrawString(str,ft,sb,3,3);
ms = new MemoryStream();
Img.Save(ms,ImageFormat.Png);
Response.ClearContent();
Response.ContentType = "image/Png";
Response.BinaryWrite(ms.ToArray());
g.Dispose();
Img.Dispose();
Response.End();
}
public string RndNum(int i)
{
string VNum = "";
Random Rnd = new Random();
string Vchar = "0,1,2,3,4,5,6,7,8,9";
string[] Vc = Vchar.Split(',');
for(int k =0;k<i;k++)
{
VNum = VNum + Vc[Rnd.Next(0,9)];
}
return VNum;
}
}
}
#9
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
CreateImage cc = new CreateImage();
cc.DrawImage();
}
/// <summary>
/// 验证码模块
/// </summary>
public class CreateImage
{
public void DrawImage()
{
CreateImage img=new CreateImage();
HttpContext.Current.Session["CheckCode"]=img.RndNum(4);
img.CreateImages(HttpContext.Current.Session["CheckCode"].ToString());
}
/// <summary>
/// 生成验证图片
/// </summary>
/// <param name="checkCode">验证字符</param>
private void CreateImages(string checkCode)
{
int iwidth = (int)(checkCode.Length * 13);
System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 23);
Graphics g = Graphics.FromImage(image);
g.Clear(Color.White);
//定义颜色
Color[] c = {Color.Black,Color.Red,Color.DarkBlue,Color.Green,Color.Orange,Color.Brown,Color.DarkCyan,Color.Purple};
//定义字体
string[] font = {"Verdana","Microsoft Sans Serif","Comic Sans MS","Arial","宋体"};
Random rand = new Random();
//随机输出噪点
for(int i=0;i<50;i++)
{
int x = rand.Next(image.Width);
int y = rand.Next(image.Height);
g.DrawRectangle(new Pen(Color.LightGray, 1), x, y, 1 , 1);
}
//输出不同字体和颜色的验证码字符
for(int i=0;i<checkCode.Length;i++)
{
int cindex = rand.Next(7);
int findex = rand.Next(5);
Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);
Brush b = new System.Drawing.SolidBrush(c[cindex]);
int ii=5;
if((i+1)%2==0)
{
ii=1;
}
g.DrawString(checkCode.Substring(i, 1), f, b, 3 + (i * 12), ii);//
}
//画一个边框
g.DrawRectangle(new Pen(Color.Black,1),0,0,image.Width-1,image.Height-1);
//输出到浏览器
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
HttpContext.Current.Response.ClearContent();
//Response.ClearContent();
HttpContext.Current.Response.ContentType = "image/Jpeg";
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
g.Dispose();
image.Dispose();
}
/// <summary>
/// 生成随机的字母
/// </summary>
/// <param name="VcodeNum">生成字母的个数</param>
/// <returns>string</returns>
private string RndNum(int VcodeNum)
{
string Vchar = "0,1,2,3,4,5,6,7,8,9" ;
string[] VcArray = Vchar.Split(',') ;
string VNum = "" ; //由于字符串很短,就不用StringBuilder了
int temp = -1 ; //记录上次随机数值,尽量避免生产几个一样的随机数
//采用一个简单的算法以保证生成随机数的不同
Random rand =new Random();
for ( int i = 1 ; i < VcodeNum+1 ; i++ )
{
if ( temp != -1)
{
rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
}
int t = rand.Next(VcArray.Length ) ;
if (temp != -1 && temp == t)
{
return RndNum( VcodeNum );
}
temp = t ;
VNum += VcArray[t];
}
return VNum ;
}
}
}
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
CreateImage cc = new CreateImage();
cc.DrawImage();
}
/// <summary>
/// 验证码模块
/// </summary>
public class CreateImage
{
public void DrawImage()
{
CreateImage img=new CreateImage();
HttpContext.Current.Session["CheckCode"]=img.RndNum(4);
img.CreateImages(HttpContext.Current.Session["CheckCode"].ToString());
}
/// <summary>
/// 生成验证图片
/// </summary>
/// <param name="checkCode">验证字符</param>
private void CreateImages(string checkCode)
{
int iwidth = (int)(checkCode.Length * 13);
System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 23);
Graphics g = Graphics.FromImage(image);
g.Clear(Color.White);
//定义颜色
Color[] c = {Color.Black,Color.Red,Color.DarkBlue,Color.Green,Color.Orange,Color.Brown,Color.DarkCyan,Color.Purple};
//定义字体
string[] font = {"Verdana","Microsoft Sans Serif","Comic Sans MS","Arial","宋体"};
Random rand = new Random();
//随机输出噪点
for(int i=0;i<50;i++)
{
int x = rand.Next(image.Width);
int y = rand.Next(image.Height);
g.DrawRectangle(new Pen(Color.LightGray, 1), x, y, 1 , 1);
}
//输出不同字体和颜色的验证码字符
for(int i=0;i<checkCode.Length;i++)
{
int cindex = rand.Next(7);
int findex = rand.Next(5);
Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);
Brush b = new System.Drawing.SolidBrush(c[cindex]);
int ii=5;
if((i+1)%2==0)
{
ii=1;
}
g.DrawString(checkCode.Substring(i, 1), f, b, 3 + (i * 12), ii);//
}
//画一个边框
g.DrawRectangle(new Pen(Color.Black,1),0,0,image.Width-1,image.Height-1);
//输出到浏览器
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
HttpContext.Current.Response.ClearContent();
//Response.ClearContent();
HttpContext.Current.Response.ContentType = "image/Jpeg";
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
g.Dispose();
image.Dispose();
}
/// <summary>
/// 生成随机的字母
/// </summary>
/// <param name="VcodeNum">生成字母的个数</param>
/// <returns>string</returns>
private string RndNum(int VcodeNum)
{
string Vchar = "0,1,2,3,4,5,6,7,8,9" ;
string[] VcArray = Vchar.Split(',') ;
string VNum = "" ; //由于字符串很短,就不用StringBuilder了
int temp = -1 ; //记录上次随机数值,尽量避免生产几个一样的随机数
//采用一个简单的算法以保证生成随机数的不同
Random rand =new Random();
for ( int i = 1 ; i < VcodeNum+1 ; i++ )
{
if ( temp != -1)
{
rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
}
int t = rand.Next(VcArray.Length ) ;
if (temp != -1 && temp == t)
{
return RndNum( VcodeNum );
}
temp = t ;
VNum += VcArray[t];
}
return VNum ;
}
}
}
#1
学习
#2
http://renyu732.cnblogs.com/archive/2005/07/02/185161.html
#3
具体参考
http://singlepine.cnblogs.com/articles/264894.html
原理:在产生验证码的页面的Page_Load中调用产生随机数的函数,并把结果以流的方式输出到页面上,相当于画了个小图片,然后在另一个要使用验证码的页面中有个image,让image的src="ValidateCode.aspx",这样就把验证码以图片的方式显示到image里面去了。
private void Page_Load(object sender, System.EventArgs e)
{
Validate_Code(VNum);//调用产生验证码方法
}
以流方式输出到页面
private void Validate_Code(string VNum)
{
int Gheight=(int)(VNum.Length * 11.5);
//gheight为图片宽度,根据字符长度自动更改图片宽度
System.Drawing.Bitmap Img = new System.Drawing.Bitmap(Gheight,20);
Graphics g = Graphics.FromImage(Img);
g.DrawString(VNum,new System.Drawing.Font("Arial",10),new System.Drawing.SolidBrush(Color.Red),3,3);
//在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y)
System.IO.MemoryStream ms=new System.IO.MemoryStream();
Img.Save(ms,System.Drawing.Imaging.ImageFormat.Png);
Response.ClearContent(); //需要输出图象信息 要修改HTTP头
Response.ContentType="image/Png";
Response.BinaryWrite(ms.ToArray());
g.Dispose();
Img.Dispose();
Response.End();
}
显示到图片上
<IMG alt="" src="ValidateCode.aspx">
http://singlepine.cnblogs.com/articles/264894.html
原理:在产生验证码的页面的Page_Load中调用产生随机数的函数,并把结果以流的方式输出到页面上,相当于画了个小图片,然后在另一个要使用验证码的页面中有个image,让image的src="ValidateCode.aspx",这样就把验证码以图片的方式显示到image里面去了。
private void Page_Load(object sender, System.EventArgs e)
{
Validate_Code(VNum);//调用产生验证码方法
}
以流方式输出到页面
private void Validate_Code(string VNum)
{
int Gheight=(int)(VNum.Length * 11.5);
//gheight为图片宽度,根据字符长度自动更改图片宽度
System.Drawing.Bitmap Img = new System.Drawing.Bitmap(Gheight,20);
Graphics g = Graphics.FromImage(Img);
g.DrawString(VNum,new System.Drawing.Font("Arial",10),new System.Drawing.SolidBrush(Color.Red),3,3);
//在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y)
System.IO.MemoryStream ms=new System.IO.MemoryStream();
Img.Save(ms,System.Drawing.Imaging.ImageFormat.Png);
Response.ClearContent(); //需要输出图象信息 要修改HTTP头
Response.ContentType="image/Png";
Response.BinaryWrite(ms.ToArray());
g.Dispose();
Img.Dispose();
Response.End();
}
显示到图片上
<IMG alt="" src="ValidateCode.aspx">
#4
http://community.csdn.net/Expert/topic/4295/4295800.xml?temp=.3524286
#5
可以随机的在图片上画一些点,或线段,以防止被识别
#6
这种问题在CSDN的论坛里一搜就多的是了!
#7
我的实现方式:
http://blog.csdn.net/guanzhongs/archive/2005/12/29/564796.aspx
http://blog.csdn.net/guanzhongs/archive/2005/12/29/564796.aspx
#8
<tr><TD align=right>驗証碼:
<asp:TextBox id="txtyz" runat="server" BorderColor="#333333" BorderWidth="1px"></asp:TextBox>
<td align=left width=120> <asp:Image id="Image1" runat="server" ImageUrl="YZgif.aspx"></asp:Image></td>
</TD></tr>
YZgif.aspx
<%@ Page Inherits="Exam.Admin.YZgif" Src="YZgif.cs" %>
YZgif.cs
using System;
using System.IO;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace Exam.Admin
{
/// <summary>
/// YZgif 的摘要说明。
/// </summary>
public class YZgif : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Image Image1;
protected System.Web.UI.WebControls.TextBox txtyz;
private void Page_Load(object sender, System.EventArgs e)
{
string VNum = "";
VNum = this.RndNum(4);
Session["VNum"] = VNum;
this.ValidataCode(VNum);
// 在此处放置用户代码以初始化页面
}
#region Web Form Designer generated code
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
public void ValidataCode(string str)
{
System.Drawing.Bitmap Img;
Graphics g;
MemoryStream ms;
int gheight = str.Length*11;
Img = new Bitmap(gheight,20);
g = Graphics.FromImage(Img);
SolidBrush sb = new SolidBrush(Color.DarkSlateBlue);
Font ft = new Font("Arial",10);
g.DrawString(str,ft,sb,3,3);
ms = new MemoryStream();
Img.Save(ms,ImageFormat.Png);
Response.ClearContent();
Response.ContentType = "image/Png";
Response.BinaryWrite(ms.ToArray());
g.Dispose();
Img.Dispose();
Response.End();
}
public string RndNum(int i)
{
string VNum = "";
Random Rnd = new Random();
string Vchar = "0,1,2,3,4,5,6,7,8,9";
string[] Vc = Vchar.Split(',');
for(int k =0;k<i;k++)
{
VNum = VNum + Vc[Rnd.Next(0,9)];
}
return VNum;
}
}
}
<asp:TextBox id="txtyz" runat="server" BorderColor="#333333" BorderWidth="1px"></asp:TextBox>
<td align=left width=120> <asp:Image id="Image1" runat="server" ImageUrl="YZgif.aspx"></asp:Image></td>
</TD></tr>
YZgif.aspx
<%@ Page Inherits="Exam.Admin.YZgif" Src="YZgif.cs" %>
YZgif.cs
using System;
using System.IO;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace Exam.Admin
{
/// <summary>
/// YZgif 的摘要说明。
/// </summary>
public class YZgif : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Image Image1;
protected System.Web.UI.WebControls.TextBox txtyz;
private void Page_Load(object sender, System.EventArgs e)
{
string VNum = "";
VNum = this.RndNum(4);
Session["VNum"] = VNum;
this.ValidataCode(VNum);
// 在此处放置用户代码以初始化页面
}
#region Web Form Designer generated code
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
public void ValidataCode(string str)
{
System.Drawing.Bitmap Img;
Graphics g;
MemoryStream ms;
int gheight = str.Length*11;
Img = new Bitmap(gheight,20);
g = Graphics.FromImage(Img);
SolidBrush sb = new SolidBrush(Color.DarkSlateBlue);
Font ft = new Font("Arial",10);
g.DrawString(str,ft,sb,3,3);
ms = new MemoryStream();
Img.Save(ms,ImageFormat.Png);
Response.ClearContent();
Response.ContentType = "image/Png";
Response.BinaryWrite(ms.ToArray());
g.Dispose();
Img.Dispose();
Response.End();
}
public string RndNum(int i)
{
string VNum = "";
Random Rnd = new Random();
string Vchar = "0,1,2,3,4,5,6,7,8,9";
string[] Vc = Vchar.Split(',');
for(int k =0;k<i;k++)
{
VNum = VNum + Vc[Rnd.Next(0,9)];
}
return VNum;
}
}
}
#9
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
CreateImage cc = new CreateImage();
cc.DrawImage();
}
/// <summary>
/// 验证码模块
/// </summary>
public class CreateImage
{
public void DrawImage()
{
CreateImage img=new CreateImage();
HttpContext.Current.Session["CheckCode"]=img.RndNum(4);
img.CreateImages(HttpContext.Current.Session["CheckCode"].ToString());
}
/// <summary>
/// 生成验证图片
/// </summary>
/// <param name="checkCode">验证字符</param>
private void CreateImages(string checkCode)
{
int iwidth = (int)(checkCode.Length * 13);
System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 23);
Graphics g = Graphics.FromImage(image);
g.Clear(Color.White);
//定义颜色
Color[] c = {Color.Black,Color.Red,Color.DarkBlue,Color.Green,Color.Orange,Color.Brown,Color.DarkCyan,Color.Purple};
//定义字体
string[] font = {"Verdana","Microsoft Sans Serif","Comic Sans MS","Arial","宋体"};
Random rand = new Random();
//随机输出噪点
for(int i=0;i<50;i++)
{
int x = rand.Next(image.Width);
int y = rand.Next(image.Height);
g.DrawRectangle(new Pen(Color.LightGray, 1), x, y, 1 , 1);
}
//输出不同字体和颜色的验证码字符
for(int i=0;i<checkCode.Length;i++)
{
int cindex = rand.Next(7);
int findex = rand.Next(5);
Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);
Brush b = new System.Drawing.SolidBrush(c[cindex]);
int ii=5;
if((i+1)%2==0)
{
ii=1;
}
g.DrawString(checkCode.Substring(i, 1), f, b, 3 + (i * 12), ii);//
}
//画一个边框
g.DrawRectangle(new Pen(Color.Black,1),0,0,image.Width-1,image.Height-1);
//输出到浏览器
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
HttpContext.Current.Response.ClearContent();
//Response.ClearContent();
HttpContext.Current.Response.ContentType = "image/Jpeg";
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
g.Dispose();
image.Dispose();
}
/// <summary>
/// 生成随机的字母
/// </summary>
/// <param name="VcodeNum">生成字母的个数</param>
/// <returns>string</returns>
private string RndNum(int VcodeNum)
{
string Vchar = "0,1,2,3,4,5,6,7,8,9" ;
string[] VcArray = Vchar.Split(',') ;
string VNum = "" ; //由于字符串很短,就不用StringBuilder了
int temp = -1 ; //记录上次随机数值,尽量避免生产几个一样的随机数
//采用一个简单的算法以保证生成随机数的不同
Random rand =new Random();
for ( int i = 1 ; i < VcodeNum+1 ; i++ )
{
if ( temp != -1)
{
rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
}
int t = rand.Next(VcArray.Length ) ;
if (temp != -1 && temp == t)
{
return RndNum( VcodeNum );
}
temp = t ;
VNum += VcArray[t];
}
return VNum ;
}
}
}
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
CreateImage cc = new CreateImage();
cc.DrawImage();
}
/// <summary>
/// 验证码模块
/// </summary>
public class CreateImage
{
public void DrawImage()
{
CreateImage img=new CreateImage();
HttpContext.Current.Session["CheckCode"]=img.RndNum(4);
img.CreateImages(HttpContext.Current.Session["CheckCode"].ToString());
}
/// <summary>
/// 生成验证图片
/// </summary>
/// <param name="checkCode">验证字符</param>
private void CreateImages(string checkCode)
{
int iwidth = (int)(checkCode.Length * 13);
System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 23);
Graphics g = Graphics.FromImage(image);
g.Clear(Color.White);
//定义颜色
Color[] c = {Color.Black,Color.Red,Color.DarkBlue,Color.Green,Color.Orange,Color.Brown,Color.DarkCyan,Color.Purple};
//定义字体
string[] font = {"Verdana","Microsoft Sans Serif","Comic Sans MS","Arial","宋体"};
Random rand = new Random();
//随机输出噪点
for(int i=0;i<50;i++)
{
int x = rand.Next(image.Width);
int y = rand.Next(image.Height);
g.DrawRectangle(new Pen(Color.LightGray, 1), x, y, 1 , 1);
}
//输出不同字体和颜色的验证码字符
for(int i=0;i<checkCode.Length;i++)
{
int cindex = rand.Next(7);
int findex = rand.Next(5);
Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold);
Brush b = new System.Drawing.SolidBrush(c[cindex]);
int ii=5;
if((i+1)%2==0)
{
ii=1;
}
g.DrawString(checkCode.Substring(i, 1), f, b, 3 + (i * 12), ii);//
}
//画一个边框
g.DrawRectangle(new Pen(Color.Black,1),0,0,image.Width-1,image.Height-1);
//输出到浏览器
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg);
HttpContext.Current.Response.ClearContent();
//Response.ClearContent();
HttpContext.Current.Response.ContentType = "image/Jpeg";
HttpContext.Current.Response.BinaryWrite(ms.ToArray());
g.Dispose();
image.Dispose();
}
/// <summary>
/// 生成随机的字母
/// </summary>
/// <param name="VcodeNum">生成字母的个数</param>
/// <returns>string</returns>
private string RndNum(int VcodeNum)
{
string Vchar = "0,1,2,3,4,5,6,7,8,9" ;
string[] VcArray = Vchar.Split(',') ;
string VNum = "" ; //由于字符串很短,就不用StringBuilder了
int temp = -1 ; //记录上次随机数值,尽量避免生产几个一样的随机数
//采用一个简单的算法以保证生成随机数的不同
Random rand =new Random();
for ( int i = 1 ; i < VcodeNum+1 ; i++ )
{
if ( temp != -1)
{
rand =new Random(i*temp*unchecked((int)DateTime.Now.Ticks));
}
int t = rand.Next(VcArray.Length ) ;
if (temp != -1 && temp == t)
{
return RndNum( VcodeNum );
}
temp = t ;
VNum += VcArray[t];
}
return VNum ;
}
}
}