文档章节

asp.net生成简单验证码

 杨勇汉
发布于 2015/02/01 14:04
字数 789
阅读 34
收藏 0

我是初学者,只能实现一些小小的功能,希望对于我们这样的初学者有帮助

先看一下效果图:


其实很简单的一个生成验证码的东西。

1、首先创建网站:


创建一个文件夹Handler,并添加一般处理程序Handler.ashx文件;在这里说一下ashx文件是什么。

.ashx 文件用于写web handler的。.ashx文件与.aspx文件类似,可以通过它来调用HttpHandler类,它免去了普通.aspx页面的控件解析以及页面处理的过程。其实就是带HTML和C#的混合文件。

.ashx文件适合产生供浏览器处理的、不需要回发处理的数据格式,例如用于生成动态图片动态文本等内容。

2、编写网站Default.aspx

<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="txtValidCode" runat="server"></asp:TextBox>
        <asp:Image ID="Image1" runat="server" AlternateText="验证码图片" Height="22px" 
            ImageUrl="~/Handler/Handler.ashx" Width="70px" />
    
        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
            ControlToValidate="txtValidCode" ErrorMessage="*" ForeColor="#FF3300"></asp:RequiredFieldValidator>
        <br />
        <br />
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="提交" />
    </div>
    </form>
</body>
3、handler.ashx文件代码内容:

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

using System;
using System.Web;
using System.Text;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Web.SessionState;
//IRequiresSessionState必须加上这个接口,否则对绘画没有访问权限
public class Handler : IHttpHandler,IRequiresSessionState {
    //处理程序默认方法,固定的,context上下文 
    public void ProcessRequest (HttpContext context) {
        string strValidCode;
        // 产生5位随机字符
        strValidCode = this.GetValidCode(5);    
        //将字符串保存到Session中,以便需要时进行验证                                                 
        context.Session["ValidCode"] = strValidCode;
        //定义宽120像素,高30像素的数据定义的图像对象                                           
        Bitmap image = new Bitmap(120, 30);
        //绘制图片                                
        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("新宋体", 20, (System.Drawing.FontStyle.Bold));
            //设置画笔类型
            LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 3, true);
            //绘制随机字符
            g.DrawString(strValidCode, font, brush, 5, 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, ImageFormat.Gif);
            //清除当前缓冲区流中的所有内容                                              
            context.Response.ClearContent();
            //设置输出流的MIME类型                            
            context.Response.ContentType = "image/Gif";
            //将内存流写入到输出流                                         
            context.Response.BinaryWrite(ms.ToArray());                                         
        }
        finally
        {
            g.Dispose();
            image.Dispose();
        }
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }
    private string GetValidCode(int num)
    {
        //定义要随机抽取的字符串
        string strRandomCode = "ABCD1EF2GH3IJ4KL5MN6P7QR8ST9UVWXYZ";
        //将定义的字符串转成字符数组                            
        char[] chastr = strRandomCode.ToCharArray();
        //定义StringBuilder对象用于存放验证码                                      
        StringBuilder sbValidCode = new StringBuilder();
        //随机函数,随机抽取字符                                        
        Random rd = new Random();                                                                   
        for (int i = 0; i < num; i++)
        {
            //以strRandomCode的长度产生随机位置并截取该位置的字符添加到StringBuilder对象中
            sbValidCode.Append(strRandomCode.Substring(rd.Next(0, strRandomCode.Length), 1));
        }
        return sbValidCode.ToString();

    }
}

4、点击提交所处理的后台代码Default.aspx.cs

protected void Button1_Click(object sender, EventArgs e)
    {
        if (txtValidCode.Text.ToUpper().Equals(Session["ValidCode"].ToString().ToUpper()))
        {
            Response.Write("<script>alert('验证码输入正确!')</script>");
        }
        else
        {
            Response.Write("<script>alert('验证码输入错误,请重新输入!')</script>");
        }
    }

ok!



本文转载自:http://blog.csdn.net/rhljiayou/article/details/8028509

粉丝 2
博文 69
码字总数 0
作品 0
东城
私信 提问
【转载】Asp.Net生成图片验证码工具类

在Asp.Net应用程序中,很多时候登陆页面以及其他安全重要操作的页面需要输入验证码,本文提供一个生成验证码图片的工具类,该工具类通过随机数生成验证码文本后,再通过C#中的图片处理类位图...

江湖逍遥
07/14
0
0
.NET Core实战项目之CMS 第十六章 用户登录及验证码功能实现

前面为了方便我们只是简单实现了基本业务功能的增删改查,但是登录功能还没有实现,而登录又是系统所必须的,得益于 ASP.NET Core的可扩展性因此我们很容易实现我们的登录功能。今天我将带着...

依乐祝
01/23
0
0
网上几种常见校验码图片分析

前几天受刺激了,准备把CSDN的校验码图片修改。就上网找了一些参考示例。和分析了一些校验码的功能。不敢独享,整理到一起,跟大家分享。 至于CSDN新的校验码写法,不是这里面的任何一种。也...

晨曦之光
2012/03/09
235
0
细谈asp.net如何处理应用程序-----c#菜鸟日记

关于asp.net的很多,如:《asp.net典型模块开发》,还有《asp.net项目与典型模块开发》,《asp.net系统精髓》,这些书都是学习asp.net很好的书,做asp.net项目要用到,这些都可用c#编程语言开...

crossmix
2016/03/23
26
0
在ASP.NET下实现数字和字符相混合的验证码

作者:kwklover(原作) 出处:CSDN 在ASP.NET下实现数字和字符相混合的验证码 经常在论坛里看到有问怎么实现验证码的帖子,其实关于验证码的文章在CSDN,DEV-CLUB等网站上都有很多,但是很多文...

晨曦之光
2012/03/09
63
0

没有更多内容

加载失败,请刷新页面

加载更多

《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
6
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
7
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
5
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
1K
11
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部