ASP.NET自定义控件制作验证码代码示例
上节课讲解了asp.net自定义控件的概述这次给大家共享一个ASP.NET自定义控件制作的算术验证码。
首先封装好变量
/// <summary>
/// 加数
/// </summary>
private int number1;
private int Number1
{
get { return number1; }
set { number1 = value; }
}
/// <summary>
/// 被加数
/// </summary>
private int number2;
private int Number2
{
get { return number2; }
set { number2 = value; }
}
/// <summary>
/// 结果
/// </summary>
private int result;
private int Result
{
get { return result; }
set { result = value; }
}
开始制作验证码
/// <summary>
/// 生成验证码
/// </summary>
private void CreateCode()
{
HttpResponse resp = this.Page.Response;
//用来存取验证码
String chkCode = string.Empty;
//颜色列表
Color[] color = { Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.DarkBlue };
//字体列表
String[] font = { "Times New Roman", "MS Mincho", "Book Antiqua", "Gungsuh", "PMingLiU", "Impact" };
Random rnd = new Random();
//阿拉伯数字
int[] num1 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//汉字数字
Char[] num2 = { '零', '一', '二', '三', '四', '五', '六', '七', '八', '九' };
//汉字数字2
Char[] num3 = { '零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖' };
int[] suiJi = { 1, 2, 3 };
int nn = suiJi;
if (nn == 1)
{
int i3 = rnd.Next(num3.Length);
Char c3 = num3;
int i2 = rnd.Next(num2.Length);
Char c2 = num2;
Number1 = i3;
Number2 = i2;
Result = Number1 + Number2;
chkCode = c3 + "+" + c2 + "=" + "?";
}
if (nn == 2)
{
int i3 = rnd.Next(num3.Length);
Char c3 = num3;
int i2 = rnd.Next(num2.Length);
Char c2 = num2;
Number1 = i3;
Number2 = i2;
if (Number1 < Number2)
{
this.CreateCode();
}
Result = Number1 - Number2;
chkCode = "?" + "+" + c2 + "=" + c3;
}
if (nn == 3)
{
int i3 = rnd.Next(num3.Length);
Char c3 = num3;
int i2 = rnd.Next(num2.Length);
Char c2 = num2;
Number1 = i3;
Number2 = i2;
if (Number1 > Number2)
{
this.CreateCode();
}
Result = Number2 - Number1;
chkCode = c3 + "+" + "?" + "=" + c2;
}
//保存验证码到Session对象
this.Page.Session["Code"] = Result;
//创建一个位图
Bitmap bmp = new Bitmap(200, 30);
//绘制涂层
Graphics g = Graphics.FromImage(bmp);
//填充背景色为白色
//画噪线
for (int i = 0; i < 6; i++)
{
int x1 = rnd.Next(100);
int y1 = rnd.Next(30);
int x2 = rnd.Next(100);
int y2 = rnd.Next(30);
Color clr = color;
g.DrawLine(new Pen(clr), x1, y1, x2, y2);
}
//画噪点
for (int i = 0; i < 100; i++)
{
int x = rnd.Next(bmp.Width);
int y = rnd.Next(bmp.Height);
Color clr = color;
bmp.SetPixel(x, y, clr);
}
//画验证码
for (int i = 0; i < chkCode.Length; i++)
{
String fnt = font;
Font ft = new Font(fnt, 16);
Color clr = color;
g.DrawString(chkCode.ToString(), ft, new SolidBrush(clr), (float)i * 20 + 20, (float)6);
}
//将验证码写入内存流
MemoryStream ms = new MemoryStream();
try
{
bmp.Save(ms, ImageFormat.Png);
resp.ClearContent();
resp.ContentType = "image/Png";
resp.BinaryWrite(ms.ToArray());
resp.Flush();
resp.End();
}
finally
{
bmp.Dispose();
g.Dispose();
}
}
代码仅供参考 其他的还需调用函数
交流交流好啊!楼主真厉害
static/image/common/sigline.gif
http://shop103534827.taobao.com 学习了,谢谢
页:
[1]