展会信息港展会大全

asp.net验证码图片生成示例
来源:互联网   发布日期:2016-01-26 10:52:02   浏览:597次  

导读:网站验证码是一种很常用的技术。下面我介绍下技术上是如何实现的验证码是一张图片。我们需要在前台代码中写一段img,src指向一张页面(ValidateImage aspx)。代码如下:script language=javascript ...

网站验证码是一种很常用的技术。下面我介绍下技术上是如何实现的

验证码是一张图片。我们需要在前台代码中写一段<img>,src指向一张页面(ValidateImage.aspx)。

代码如下:

<script language="javascript">

function changeImg() {

$("#imgCheckNo").attr("src", "ValidateImage.aspx?r=" + getRandom(999));

}

function getRandom(n) { return Math.floor(Math.random() * n + 1) }

</script>

<div>

<img id="imgCheckNo" src="ValidateImage.aspx" style="border-color: #000000; border-width: 1px;border-style: Solid">

<span onclick="changeImg();">看不清?换一张</span>

</div>

<div>

<div class="labelCss">验证码:</div>

<div>

<asp:TextBox ID="tbxCheckNo" runat="server" CssClass="tbxCss"></asp:TextBox>

</div>

<div>

<asp:Button ID="btnSubmit" runat="server" Text="立即注册" OnClick="btnSubmit_Click" />

</div>

ValidateImage.aspx 用来生产验证码图片,并将验证码的码值保存到cookie中。

代码如下:

代码如下:

public partial class ValidateImage : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

this.CreateCheckCodeImage(RndNum());

}

/// <summary>生成验证码

/// </summary>

/// <returns></returns>

private string RndNum()

{

int number;

char code;

string checkCode = String.Empty;

System.Random random = new Random();

for (int i = 0; i < 4; i++)

{

number = random.Next();

if (number % 2 == 0)

code = (char)('0' + (char)(number % 10));

else

code = (char)('A' + (char)(number % 26));

checkCode += code.ToString();

}

Response.Cookies.Add(new HttpCookie("yzmcode", checkCode));

return checkCode;

}

/// <summary>向页面生成验证码Gif图片

/// </summary>

/// <param name="checkCode"></param>

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);

Graphics g = Graphics.FromImage(image);

try

{

//生成随机生成器

Random random = new Random();

//清空图片背景色

g.Clear(Color.White);

//画图片的背景噪音线

for (int i = 0; i < 25; i++)

{

int x1 = random.Next(image.Width);

int x2 = random.Next(image.Width);

int y1 = random.Next(image.Height);

int y2 = random.Next(image.Height);

g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);

}

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);

//画图片的前景噪音点

for (int i = 0; i < 100; i++)

{

int x = random.Next(image.Width);

int y = random.Next(image.Height);

image.SetPixel(x, y, Color.FromArgb(random.Next()));

}

//画图片的边框线

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();

}

}

}

最后就是后台事件,判断当前验证码是否正确。

代码如下:

代码如下:

#region 页面控件事件

protected void btnSubmit_Click(object sender, EventArgs e)

{

if (String.Compare(Request.Cookies["yzmcode"].Value, tbxCheckNo.Text, true) != 0)

{

Response.Write("<script>alert('验证码错误!')</script>");

}

else

{

// Response.Write("<script>alert('验证吗正确!!!')</script>");

}

}

#endregion

赞助本站

人工智能实验室

相关热词: 验证码 asp net

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港