C#验证码的生成 Default2 .aspx.cs代码 ------------------------------------------------------------ using System; using System.Drawing; using System.Drawing.Imaging; public partial class Default2 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // 在此处放置用户代码以初始化页面 //RndNum是一个自定义函数 string VNum = RndNum(4); //这里的数字4代表显示的是4位的验证字符串! Session["VNum"] = VNum; ValidateCode(VNum); } //生成图像函数 private void ValidateCode(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.Jpeg); Response.ClearContent(); //需要输出图象信息 要修改HTTP头 Response.ContentType = "image/Jpeg"; Response.BinaryWrite(ms.ToArray()); g.Dispose(); Img.Dispose(); Response.End(); } //生成随机数函数中从Vchar数组中随机抽取 //字母区分大小写 public string RndNum(int VcodeNum) { string Vchar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z"; 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(35) ; int t = rand.Next(35); if (temp != -1 && temp == t) { return RndNum(VcodeNum); } temp = t; VNum += VcArray[t]; } return VNum; } } --------------------------------------------------- _Default .aspx代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <br /> <asp:Image ID="Image1" runat="server" ImageUrl ="~/Default2.aspx" Height="24px" Width="112px" /><br /> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /><br />
</form> </body> </html> ------------------------------------------------------- _Default .aspx.cs代码 ---------------------------------------------- using System; using System.Data; using System.Configuration; using System.Collections; 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; using System.Drawing.Imaging; public partial class _Default : System.Web.UI.Page { private void Page_Load(object sender, System.EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { string VNum; VNum = Session["VNum"].ToString(); ViewState["VNum"] = VNum; if (this.TextBox1.Text == ViewState["VNum"].ToString()) { Response.Write("验证码正确"); } else { Response.Write("验证码错误!"); }
using System.Drawing;
using System.Drawing.Imaging; public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// 在此处放置用户代码以初始化页面
//RndNum是一个自定义函数
string VNum = RndNum(4); //这里的数字4代表显示的是4位的验证字符串!
Session["VNum"] = VNum;
ValidateCode(VNum);
}
//生成图像函数
private void ValidateCode(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.Jpeg);
Response.ClearContent(); //需要输出图象信息 要修改HTTP头
Response.ContentType = "image/Jpeg";
Response.BinaryWrite(ms.ToArray());
g.Dispose();
Img.Dispose();
Response.End();
} //生成随机数函数中从Vchar数组中随机抽取
//字母区分大小写
public string RndNum(int VcodeNum)
{
string Vchar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z"; 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(35) ;
int t = rand.Next(35);
if (temp != -1 && temp == t)
{
return RndNum(VcodeNum);
}
temp = t;
VNum += VcArray[t]; }
return VNum;
}
}
--------------------------------------------------- _Default .aspx代码 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<br />
<asp:Image ID="Image1" runat="server" ImageUrl ="~/Default2.aspx" Height="24px" Width="112px" /><br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /><br />
</form>
</body>
</html>
------------------------------------------------------- _Default .aspx.cs代码 ---------------------------------------------- using System;
using System.Data;
using System.Configuration;
using System.Collections;
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;
using System.Drawing.Imaging; public partial class _Default : System.Web.UI.Page
{ private void Page_Load(object sender, System.EventArgs e)
{ } protected void Button1_Click(object sender, EventArgs e)
{
string VNum;
VNum = Session["VNum"].ToString();
ViewState["VNum"] = VNum; if (this.TextBox1.Text == ViewState["VNum"].ToString())
{
Response.Write("验证码正确");
}
else
{
Response.Write("验证码错误!");
}
}
}
关键是输入焦点