欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【ASp.Net自定义验证码控件】,下面是详细的分享!
ASp.Net自定义验证码控件
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace AuthCode
{
[ToolboxData("〈{0}:AuthCode runat=server>〈/{0}:AuthCode>")]
public class AuthCode : WebControl
{
/// 〈summary>
/// 获得验证码的值
/// 〈/summary>
/// 〈returns>验证码〈/returns>
public string GetValue()
{
return HttpContext.Current.Session["value"].ToString();
}
[Bindable(true)]
[Category("Appearance")]
[Description("验证码字符长度")]
[DefaultValue("ss")]
[Localizable(true)]
//长度
internal static int mySize;
public int MySize
{
get { return AuthCode.mySize; }
set
{
AuthCode.mySize=value;
}
}
public AuthCode()
: base(HtmlTextWriterTag.Img)//重写父类的构造(输出流的HTML标记)
{ }
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
base.AddAttributesToRender(writer);//将要输出的的HTML标签的属性和样式添加到指定的 HtmlTextWriter中
writer.AddStyleAttribute(HtmlTextWriterStyle.Cursor, "pointer");//添加样式
writer.AddAttribute("onclick", "this.src='http://www.chinaz.com/program/2008/1124/img.jd?id='+Math.random()");//添加js VerifyImg.jd
writer.AddAttribute(HtmlTextWriterAttribute.Src, "img.jd");
writer.AddAttribute("alt", "点击刷新");
}
}
}
3.2--》新建处理类(必须实现 IHttpHandler,IRequiresSessionState 两个接口)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI;
using System.Web.SessionState;
using System.Drawing;
using System.IO;
namespace AuthCode
{
public class AuthCodeHttpHander:IHttpHandler,IRequiresSessionState
{
/// 〈summary>
/// 返回验证码字符
/// 〈/summary>
/// 〈param name="codeCount">验证码长度〈/param>
/// 〈returns>〈/returns>
private string GetRandomNumberString(int codeCount)
{
string strChoice="2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z";
string[] strResult=strChoice.Split(new Char[] { ',' });
string strReturn="";
Random rnd=new Random();
for (int i=0; i 〈 codeCount; i++)
{
int j=rnd.Next(strResult.Length);//随机数不能大于数组的长度
strReturn=strReturn + strResult[j].ToString();
}
return strReturn;
}
private Color GetColor()
{
return Color.Black;
}
private Bitmap CreateImage(string str_AuthCode)
{
int width=str_AuthCode.Length* 21;
int height=30;
Random rad=new Random();
Bitmap bmp=new Bitmap(width, height);
Graphics grp=Graphics.FromImage(bmp);// 在图片上绘制图形
grp.Clear(Color.YellowGreen);//填充bmp的背景色
grp.DrawRectangle(new Pen(Color.Red, 1), 0, 0, width - 1, height - 1);//绘制边框
int num=width * height;
for (int i=0; i 〈 num; i++)//在图片的指定坐标上画上有颜色的圆点
{
int x=rad.Next(width);
int y=rad.Next(height);
int r=rad.Next(255);
int g=rad.Next(255);
int b=rad.Next(255);
Color c=Color.FromArgb(r, g, b);
bmp.SetPixel(x, y, c);//在图片的指定坐标上画上有颜色的圆点
}
Font f=new Font("宋体", 20, FontStyle.Bold);//定义字体
Brush br=new SolidBrush(Color.Black);//定义画笔的颜色 及字体的颜色
for (int i=0; i 〈 str_AuthCode.Length; i++)
{
string s=str_AuthCode.Substring(i, 1);//单个单个的将字画到图片上
Point p=new Point(i * 20 + rad.Next(3), rad.Next(3) + 1);//字体出现的位置(坐标)
grp.DrawString(s, f, br, p);//绘制字符串
}
grp.Dispose();
return bmp;//返回
}
/// 〈summary>
/// 是否可以处理远程的HTTP请求
/// 〈/summary>
public bool IsReusable
{
get { return true; }
}
/// 〈summary>
/// 将验证码图片发送给WEB浏览器
/// 〈/summary>
/// 〈param name="context">〈/param>
public void ProcessRequest(HttpContext context)
{
int size=AuthCode.mySize; //Int32.Parse((String)context.Session["Size"]);
MemoryStream ms=new MemoryStream(); // 创建内存流(初始长度为0 自动扩充)
string NumStr=GetRandomNumberString(size);// 获得验证码字符
context.Session.Add("value", NumStr);//将验证码字符保存到session里面
Bitmap theBitmap=CreateImage(NumStr);// 获得验证码图片
theBitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);//将位图写入内存流
context.Response.ClearContent(); //清除缓冲区里的所有内容输出
context.Response.ContentType="image/jpeg"; //需要输出图象信息 要修改HTTP头
context.Response.BinaryWrite(ms.ToArray()); //将内存流写入HTTP输出流
theBitmap.Dispose(); //释放资源
ms.Close();//释放资源
ms.Dispose();//释放资源
context.Response.End();
}
}
}
〈%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
〈%@ Register assembly="AuthCode" namespace="AuthCode" tagprefix="cc1" %>
〈!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 runat="server">
〈title>无标题页〈/title>
〈/head>
〈body>
〈form id="form1" runat="server">
〈div>
〈cc1:AuthCode ID="AuthCode1" runat="server" MySize="5" />
〈/div>
〈/form>
〈/body>
〈/html>
设置验证码字符长度
6--》在webconfig文件添加节点
〈system.web>
〈httpHandlers>
〈add verb="*" path="*.jd" type="AuthCode.AuthCodeHttpHander" />
〈/httpHandlers>
〈/system.web>
以上所分享的是关于ASp.Net自定义验证码控件,下面是编辑为你推荐的有价值的用户互动:
相关问题:asp.net 验证码控件、
答:我们在设计用户登录模块时,经常会用到验证码,可以有效地防止黑客软件的恶意破解,现公开我常用的验证码的源代码, 使用方法: 1、在Web项目中添加一个类,如“CreateImage.cs”,然后将我公布的源代码Copy进去; 2、再新建一个Web窗体,如“Image... >>详细
相关问题:asp.net验证码控件下载
答:验证码? 自己写个不就可以了? http://download.csdn.net/source/1840973 给你地址 追问: 这个怎么用呢 回 在你要的页面创建一个Image 标签 然后把url指向这个生成验证码的页面就行了 追问: 可不可以刷新啊 回 追问: 图片上的验证码... >>详细
相关问题:如何:使用自定义函数对 ASP.NET 服务器控件进行验证
答:如果现有的 ASP.NET 验证控件无法满足需求,您可以定义一个自定义的服务器端验证函数,然后使用 CustomValidator 控件来调用它。 您还可以通过编写 ECMAScript (JavaScript) 函数,重复服务器端方法的逻辑,从而添加客户端验证,在提交页面之前... >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
