This article is a mirror article of machine translation, please click here to jump to the original article.

View: 18594|Reply: 1

[ASP.NET] asp.net the principle and code of image captcha generation

[Copy link]
Posted on 4/2/2015 10:26:51 AM | | |
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.Design;
using System.Drawing;
public partial class imagecode : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this. CreateCheckCodeImage(RndNum());

}

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

}
//验证码使用页login.aspx中的代码
<asp:ImageButton ID="yzm" runat="server" ImageUrl="imagecode.aspx" />
<asp:LinkButton ID="ChangeCode" runat="server" text="Can't see clearly? Change the verification code" />
<asp:Button ID="Button1" runat="server" Text="Button" /></div>
//ogin.aspx.cs中的代码
Add to
You don't need to write any code, click "Can't see clearly?" Change the verification code" to refresh the verification code later
protected void ChangeCode_Click(object sender, EventArgs e)
{
}
//提交按钮代码这里是通过cookies来验证的
protected void Button1_Click(object sender, EventArgs e)
{
if (String.Compare(Request.Cookies["yzmcode"]. Value, a.Text, true) != 0)
{
Response.Write("<scrip去掉t>alert('CAPTCHA error!')"</scrip去掉t>);
}
else
{ Response.Write("<scrip去掉t>alert('Validate!!')</scrip去掉t>"; }
}




Previous:IE kills remote command execution
Next:asp.net implement cookies to save values
Posted on 4/4/2015 10:58:42 AM |
I can already use it
Disclaimer:
All software, programming materials or articles published by Code Farmer Network are only for learning and research purposes; The above content shall not be used for commercial or illegal purposes, otherwise, users shall bear all consequences. The information on this site comes from the Internet, and copyright disputes have nothing to do with this site. You must completely delete the above content from your computer within 24 hours of downloading. If you like the program, please support genuine software, purchase registration, and get better genuine services. If there is any infringement, please contact us by email.

Mail To:help@itsvse.com