输出燥点(默认不输出)
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %><!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 id="Head1" runat="server">
<title>无标题页</title>
<script type="text/javascript">
function DoFresh() {
document.getElementById("Image1").src = "VerifyCode.aspx";
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<table>
<tr>
<td>
验证码:<asp:TextBox ID="txtValidateCode" runat="server"></asp:TextBox>
</td>
<td>
<asp:Image ID="Image1" runat="server" />
<a href="javascript:DoFresh();">看不清?</a>
</td>
</tr>
<tr>
<td align="center" colspan="2">
<br />
<asp:Literal ID="litErrorMsg" runat="server"></asp:Literal>
<asp:Button ID="btnSubmit" runat="server" Text="确定" onclick="btnSubmit_Click" />
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;public partial class Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Image1.ImageUrl = "VerifyCode.aspx";
}
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
if (Session["ValidateCode"] != null)
{
string outputValidateCode = Session["ValidateCode"] as string;
string inputValidateCode = txtValidateCode.Text.Trim();
if (string.Compare(outputValidateCode, inputValidateCode, true) != 0)
{
//Response.Write("<script>javascript:alert('输入的验证码错误!');</script>");
litErrorMsg.Text = "输入的验证码错误!";
}
else
{
//Response.Write("<script>javascript:alert('输入的验证码正确!');</script>");
litErrorMsg.Text = "输入的验证码正确!";
}
}
}
#region 调用下面的方法实现客户端保存Cookie验证模式
private void ValidateMethod()
{
if (Request.Cookies["CheckCode"] == null)
{
litErrorMsg.Text = "您的浏览器设置已被禁用 Cookies,您必须设置浏览器允许使用 Cookies 选项后才能使用本系统。";
litErrorMsg.Visible = true;
return;
}
if (String.Compare(Request.Cookies["CheckCode"].Value, TextBox1.Text.ToString().Trim(), true) != 0)
{
litErrorMsg.Text = "<font color=red>对不起,验证码错误!</font>";
litErrorMsg.Visible = true;
return;
}
else
{
litErrorMsg.Text = "<font color=green>恭喜,验证码输入正确!</font>";
litErrorMsg.Visible = true;
}
}
#endregion
}
//VerifyCode.aspx为默认生成的代码
代码如下:输出图片
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.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.IO;
public partial class VerifyCode : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//GenerateValidateCode();
GenerateVerifyImage(4);//GenerateVerifyImage(int length)
}#region 【无刷新仿google波形扭曲彩色】验证码样式0___GenerateValidateCode()
private void GenerateValidateCode()
{
this.Length = this.length;
this.FontSize = this.fontSize;
this.Chaos = this.chaos;
this.BackgroundColor = this.backgroundColor;
this.ChaosColor = this.chaosColor;
this.CodeSerial = this.codeSerial;
this.Colors = this.colors;
this.Fonts = this.fonts;
this.Padding = this.padding;
string VNum = this.CreateVerifyCode(); //取随机码
Session["ValidateCode"] = VNum.ToUpper();//取得验证码,以便后来验证
this.CreateImageOnPage(VNum, this.Context); //
//Cookie验证模式, 使用Cookies取验证码的值
//Response.Cookies.Add(new HttpCookie("CheckCode", code.ToUpper()));
}
#endregion
#region 验证码长度(默认4个验证码的长度)
int length = 4;
public int Length
{
get { return length; }
set { length = value; }
}
#endregion
#region 验证码字体大小(为了显示扭曲效果,默认40像素,可以自行修改)
int fontSize = 22;
public int FontSize
{
get { return fontSize; }
set { fontSize = value; }
}
#endregion
#region 边框补(默认1像素)
int padding = 2;
public int Padding
{
get { return padding; }
set { padding = value; }
}
#endregion
#region 是否
// 1. 生成随机背景颜色
int nRed, nGreen, nBlue; // 背景的三元色
System.Random rd = new Random((int)System.DateTime.Now.Ticks);
nRed = rd.Next(255) % 128 + 128;
nGreen = rd.Next(255) % 128 + 128;
nBlue = rd.Next(255) % 128 + 128;
// 2. 填充位图背景
System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(bmp);
graph.FillRectangle(new SolidBrush(System.Drawing.Color.FromArgb(nRed, nGreen, nBlue))
, 0
, 0
, nBmpWidth
, nBmpHeight);
// 3. 绘制干扰线条,采用比背景略深一些的颜色
int nLines = 3;
System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.Color.FromArgb(nRed - 17, nGreen - 17, nBlue - 17), 2);
for (int a = 0; a < nLines; a++)
{
int x1 = rd.Next() % nBmpWidth;
int y1 = rd.Next() % nBmpHeight;
int x2 = rd.Next() % nBmpWidth;
int y2 = rd.Next() % nBmpHeight;
graph.DrawLine(pen, x1, y1, x2, y2);
}
// 采用的字符集,可以随即拓展,并可以控制字符出现的几率
string strCode = "01234567abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
// 4. 循环取得字符,并绘制
for (int i = 0; i < nLen; i++)
{
int x = (i * 13 + rd.Next(3));
int y = rd.Next(4) + 1;
// 确定字体
System.Drawing.Font font = new System.Drawing.Font("Courier New",//文字字体类型
12 + rd.Next() % 4,//文字字体大小
System.Drawing.FontStyle.Bold);//文字字体样式
char c = strCode[rd.Next(strCode.Length)]; // 随机获取字符
validateCode += c.ToString();
// 绘制字符
graph.DrawString(c.ToString(),
font,
new SolidBrush(System.Drawing.Color.FromArgb(nRed - 60 + y * 3, nGreen - 60 + y * 3, nBlue - 40 + y * 3)),
x,
y);
}
Session["ValidateCode"] = validateCode;
//对图像进行弯曲
TwistImage(bmp, true, 4, 4);
Response.BufferOutput = true; //特别注意
Response.Cache.SetExpires(DateTime.Now.AddMilliseconds(-1));//特别注意
Response.Cache.SetCacheability(HttpCacheability.NoCache);//特别注意
Response.AppendHeader("Pragma", "No-Cache"); //特别注意
// 5. 输出字节流
MemoryStream bstream = new MemoryStream();
bmp.Save(bstream, ImageFormat.Jpeg);
Response.ClearContent();
Response.ContentType = "image/JPEG";
Response.BinaryWrite(bstream.ToArray());
Response.End();
bstream.Close();
bstream = null;
bmp.Dispose();
bmp = null;
graph.Dispose();
}
///<summary>
///得到验证码图片的宽度
///</summary>
///<paramname="validateNumLength">验证码的长度</param>
///<returns></returns>
public static int GetImagewidth(int validateNumLength)
{
return (int)(13 * validateNumLength + 5);
}
///<summary>
///得到验证码的高度
///</summary>
///<returns></returns>
public static int GetImageHeight()
{
return 25;
}
#endregion
}