方法一:
<table>
<tr>
<td align="right" class="cc">
验证码:
</td>
<td>
<img alt="" id="imgCode" style="cursor:pointer" title="看不清楚,点我" onclick="this.src='imagecode.hr?'+Math.random()" src="imagecode.hr" />
</td>
</tr>
</table>
imagecode 页面后台方法:
protected void Page_Load(object sender, EventArgs e)
{
Response.Expires = 0;
Response.CacheControl = "no-cache";
string tmp = RndNum(4);
Session.Add("Code", tmp);
Session.Timeout = 30;
this.ValidateCode(tmp);
}
private void ValidateCode(string VNum)
{
Bitmap Img = null;
Graphics g = null;
MemoryStream ms = null;
int gheight = VNum.Length * 12;
Img = new Bitmap(gheight, 24);
g = Graphics.FromImage(Img);
//背景颜色
g.Clear(Color.Gray);
//文字字体
Font f = new Font("Arial", 10);
//文字颜色
SolidBrush s = new SolidBrush(Color.Black);
g.DrawString(VNum, f, s, 3, 3);
ms = new MemoryStream();
Img.Save(ms, ImageFormat.Jpeg);
Response.ClearContent();
Response.ContentType = "images/Jpeg";
Response.BinaryWrite(ms.ToArray());
g.Dispose();
Img.Dispose();
Response.End();
}
private 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,v,w,x,y,z";
string[] VcArray = Vchar.Split(new Char[] { ',' });//分割字符串
string VNum = "";
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);
if (temp != -1 && temp == t)
{
return RndNum(VcodeNum);
}
temp = t;
VNum += VcArray[t];
}
return VNum;
}
方法二:
<table>
<tr>
<td bgcolor="#FFFFFF" align="right">验证码:</td>
<td>
<asp:TextBox ID="codes" MaxLength="4" runat="server" onkeyup="clearNoNum(this)"></asp:TextBox>
<asp:Image ID="imgcode" runat="server" ImageUrl="~/codes.aspx" ImageAlign="Middle" />
<a href="javascript:void();" onclick="imgcode.src='codes.aspx?codes='+Math.random()">刷新</a>
</td>
</tr>
</table>
codes.aspx 页面 前台:
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</div>
</form>
</body>
codes.aspx 页面 后台:
protected void Page_Load(object sender, EventArgs e)
{
this.CreateCheckCodeImage(GenerateCheckCode());
}
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
}
private string GenerateCheckCode()
{
int number;
char code;
string checkCode = String.Empty;
System.Random rad = new Random();
for (int i = 0; i < 4; i++)
{
number = rad.Next();
code = (char)('0' + (char)(number % 10));
checkCode += code.ToString();
}
Session["VNum"] = checkCode;
this.Label1.Text = checkCode;
return checkCode;
}
private void CreateCheckCodeImage(string checkCode)
{
if (checkCode == null || checkCode.Trim() == String.Empty)
return;
System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
System.Drawing.Graphics g = Graphics.FromImage(image);
try
{
// 生成随机数
Random rad = new Random();
// 清空 图片背景
g.Clear(Color.White);
Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(checkCode, font, brush, 2, 2);
//画图片的边框线
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray());
}
finally {
g.Dispose();
image.Dispose();
}
}
浙公网安备 33010602011771号