ASP.NET——验证码的制作

        我们在登陆网站,发表博客或者提交评论的时候,经常会遇到填写验证码这一项,当时感觉挺神奇的样子,终于在牛腩新闻发布系统里接触到了,在这里小小的总结下。

        用到的东东有三个:一个aspx页面,一个图片

        首先,建立一个aspx页面。        

<%@ WebHandler Language="C#" Class="Picture" %>

using System;
using System.Web;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Web.SessionState;  

public class Picture : IHttpHandler, IRequiresSessionState
 // 要使用session必须实现该接口,记得要导入System.Web.SessionState命名空间
{

    public void ProcessRequest(HttpContext context)
    {
        string checkCode = GenCode(5);  // 产生5位随机字符
        context.Session["Code"] = checkCode; //将字符串保存到Session中,以便需要时进行验证
        System.Drawing.Bitmap image = new System.Drawing.Bitmap(70, 22);
        Graphics g = Graphics.FromImage(image);
        try
        {
            //生成随机生成器
            Random random = new Random();

            //清空图片背景色
            g.Clear(Color.White);

            // 画图片的背景噪音线
            int i;
            for (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.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);

            //画图片的前景噪音点
            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);
            context.Response.ClearContent();
            context.Response.ContentType = "image/Gif";
            context.Response.BinaryWrite(ms.ToArray());
        }
        finally
        {
            g.Dispose();
            image.Dispose();
        }
    }

    /// <summary>
    /// 产生随机字符串
    /// </summary>
    /// <param name="num">随机出几个字符</param>
    /// <returns>随机出的字符串</returns>
    private string GenCode(int num)
    {
        string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        char[] chastr = str.ToCharArray();

        string code = "";
        Random rd = new Random();
        int i;
        for (i = 0; i < num; i++)
        {
            //code += source[rd.Next(0, source.Length)];
            code += str.Substring(rd.Next(0, str.Length), 1);
        }
        return code;
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

其次,在用到验证码的界面添加一个img控件,并且src属性指向.ashx文件。

<img src="handler/WaterMark.ashx" id="vimg" alt="" onclick="changeCode()"/>

        然后,判断提交的验证码是否正确。 

        //判断验证码是否输入正确
        string code = txtCode.Text.Trim().ToUpper();//将输入的字母都转化成大写然后作比较
        string rightCode = Session["Code"].ToString();
        if(code!=rightCode )
        {
            Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('验证码输入错误!');</script>");//提示错误保证后面背景不变白

            return;
        }

        最后,使用JavaScrip来刷新验证码。因为代码比较少,所以可以嵌套在代码中。        

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    <script language="javascript" type="text/javascript">
        function changeCode() {
            var imgNode = document.getElementById("vimg");
            imgNode.src = "handler/WaterMark.ashx?t=" + (new Date()).valueOf();  // 这里加个时间的参数是为了防止浏览器缓存的问题
        }
    </script>
</asp:Content>

ASP.NET——验证码的制作

时间: 2024-08-14 20:50:27

ASP.NET——验证码的制作的相关文章

ASP.NET动态网站制作(3)--css(2)

前言:css分为四次课讲完,第一节课内容见ASP.NET动态网站制作(2)--css(1),接下来的内容会涉及到定位.浮动.盒子模型(第二次课).css的具体应用(第三次课).css3(第四次课).今天的内容是关于css中定位.浮动以及盒子模型. 内容:CSS最核心的内容,围绕div标签展开. 1.做静态网页首先要考虑页面的布局,可用<div></div>来将网页分为不同的模块,就相当于盖房子一样. 2.<div></div>是一个块元素,与之相对应的还有行

asp.net登录时验证码的制作与验证

1.新建一个页面,ImageCode.aspx 2.在Page_Load中添加如下代码 string tmp = RndNum(4); HttpCookie a = new HttpCookie("ImageV ", tmp); Response.Cookies.Add(a); this.ValidateCode(tmp); 3.在该页面中添加两个方法 private void ValidateCode(string VNum) { Bitmap Img = null; Graphic

登陆时验证码的制作(asp.net)

1.显示样式: 2.新建一个页,Default2.aspx 3.在Page_load事件拷入如下代码 stringtmp = RndNum(4); HttpCookiea =newHttpCookie("ImageV ", tmp); Response.Cookies.Add(a); this.ValidateCode(tmp); 4.在该页添加两个方法: privatevoidValidateCode(stringVNum) { BitmapImg =null; Graphicsg

asp.net验证码[生成与刷新]防止恶意注册图文并茂包括

欢迎光临博客; 首先我们来分析一下验证码的实现方式; 首先验证码是一个图片包含随机生成的文字,我们可以使用一个页面, 通过程序绘制页面上的内容和干扰像素(噪点),然后状态保持方式, 比对页面上比用户输入的内容和刚刚生成的内容, 这样可以到到验证码的效果. 具体在asp.net做法如下 验证码以.dll结尾 1.首先我们可以在"工具箱"新建一个选项卡来放"验证码控件" 2.比如新建一个验证码选项卡 3.将验证码控件"可以自行下载也可在","

PHP验证码的制作教程

自己过去自学了PHP绘画验证码的教程,现在就把这一部分笔记跟大家分享,希望可以帮到大家. 顺带,我会在后面把我整理的一整套CSS3,PHP,MYSQL的开发的笔记打包放到百度云,有需要可以直接去百度云下载,这样以后你们开发就可以直接翻笔记不用百度搜那么麻烦了.  笔记链接:http://pan.baidu.com/s/1qYdQdKK 密码:pvj2 下面主要从理论+实践代码进行讲解,后面有代码实例. 一.验证码的介绍验证码是为全自动区分计算机和人类的图灵测试的缩写.是一种区分用户是计算机和人的

ASP.net 验证码(C#) MVC

http://blog.163.com/xu_shuhao/blog/static/5257748720101022697309/ 网站添加验证码,主要为防止机器人程序批量注册,或对特定的注册用户用特定程序暴力破解方式,以进行不断的登录.灌水等危害网站的操作.验证码被广泛应用在注册.登录.留言等提交信息到服务器端处理的页面中.     在ASP.NET网站中应用验证码是很容易的,网上有很多的解决方案.最近在做一个OA项目,因系统采用的ASP.NET MVC框架,同样在登录页中需用到验证码,故需将

C# ASP.NET 验证码

使用C# ASP.NET 获取 验证码的代码书写 一般都采用异步 点击 前台验证码图片 请求一次 : 前台图片代码: <img id="imgvalidatecode" src="../ashx/validatecode.ashx" alt="点击刷新" style="vertical-align: middle;" /> 服务端一般处理程序:   ValidateCode.ashx public class as

asp.net验证码

asp.net 生成验证码问题 1.添加一个.ashx文件 <%@ WebHandler Language="C#" class="CheckCode" %> using System; using System.Web; using System.Drawing; public class CheckCode : IHttpHandler { public void ProcessRequest(HttpContext context) { strin

验证码的制作(二):使用开源组件jcaptcha来实现验证码

使用开源组件jcaptcha来实现验证码 之前说了简单的运用servlet来实现验证码,但其实现的验证码样式比较单一,容易被破解.所以接下来我来介绍另一种实现验证码的方式:那就是运用开源组件jcaptcha来实现样式更全面的验证码样式. 开始之前咱们先来看看运用jcaptcha实现验证码以及对其的验证的一个大致流程:流程图如下 开始之前我们需要下载jcaptcha开源组件jar包 上边就是该项目中需要用到的war包:可以到网上下载,然后将war包解压:这里需要注意的是需要把里面的.class文件