基于ASP.NET实现验证码生成详解

 更新时间:2022年03月25日 14:43:44   作者:Rain Knight??????  
这篇文章主要为大家详细介绍了如何利用ASP.NET实现验证码的生成,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

作业:验证码

要求:

(1)验证码应该是图片格式,不能是文字格式,即无法用鼠标选中。

(2)验证码上应该有噪点和干扰线条。

(3)验证码应该回避相似字符,如“0”和“o”“I”和“1”等。

(4)验证码至少是数字和字母(含大小写)的组合,不应该是单纯的数字或字母,可以出现汉字。应该实现输入验证码字母字母“不区分大小写”。验证码中的内容,应该是随机生成。

(5)验证码,可以通过点击图片或旁边文字实现“看不清,换一张”的功能。

(6)应当有个用于核对验证码输入是否正确的tbx和btn,当点击btn时,弹窗提示验证码输入的是正确或错误

新建一个ashx文件

前端页面

<asp:Label ID="Label1" runat="server" Text="请输入验证码:"  ></asp:Label>
<asp:TextBox ID="tbx_check" runat="server"></asp:TextBox>
<asp:ImageButton ID="ImageButton1" runat="server" src="checknumber.ashx" alt="验证码"/>
<asp:Button ID="btn_check" runat="server" Text="验证" OnClick="btn_check_Click" />

aspx代码

protected void btn_check_Click(object sender, EventArgs e)
{
  //不区分大小写验证
      if (String.Compare(tbx_check.Text.Trim(), Session["check"].ToString(), true) == 0)
      {    
          Response.Write("<script>alert('验证码正确') </script>");
                
      }    
      else
      {
          Response.Write("<script>alert('验证码错误') </script>");
      }
}
 
 
//点击图片更换验证码
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
    ImageButton1.ImageUrl = "checknumber.ashx?id=" + new Random(100).ToString();
}

ashx代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
//画板
using System.Drawing;
using System.Drawing.Imaging;
//Session传值
using System.Web.SessionState;
 
namespace 验证码模块
{
    /// <summary>
    /// Handler1 的摘要说明
    /// </summary>
    public class Handler1 : IHttpHandler, IRequiresSessionState
    {
 
        public void ProcessRequest(HttpContext context)
        {
            
            //定义位图的宽度和高度
            int iBmpW = 200;
            int iBmpS = 50;
 
            //创建位图对象(并初始化宽度和高度)
            Bitmap Bmp = new Bitmap(iBmpW, iBmpS);
 
            //创建画布
            Graphics Grc = Graphics.FromImage(Bmp);//将位图装载到画布里面
 
            //将画布的背景色改为白色
            Grc.Clear(Color.White);
 
            //定义画笔对象
            SolidBrush solidBrush = new SolidBrush(Color.Blue);
 
            //定义存放的字符串,画布上要显示的验证码,回避相似字符所以去掉I、1、o、0
            string sString = "ABCDEFGHJKLMNPQRSTUVWXYZabcdefghyzklmnopqrstuvwxtz23456789呆锅工酱";
            //定义随机数
            Random Rnd = new Random((int)DateTime.Now.Ticks);//强制转换为整型
 
            //for存放随机数的字符变量
            string scode = null;
            for (int i = 0; i < 6; i++)
            {
                string temp = sString.Substring(Rnd.Next(0, sString.Length), 1);//将随即得到的每个字符进行字符串构造
                scode += temp;
            }
 
 
            //随机输出噪点
            Random rand = new Random();
            for (int i = 0; i < 10; i++)
            {
                int x = rand.Next(Bmp.Width);
                int y = rand.Next(Bmp.Height);
                Grc.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1);
            }
 
 
            int z = 6;//干扰线条数
            for (int i = 0; i < z; i++)
            {
                int x1 = rand.Next(Bmp.Width);
                int x2 = rand.Next(Bmp.Width);
                int y1 = rand.Next(Bmp.Height);
                int y2 = rand.Next(Bmp.Height);
                Grc.DrawLine(new Pen(Color.LightGray, 1), x1, y1, x2, y2);//根据坐标画线
            }
 
 
            Font ft = new Font("Arial", 25);
            Grc.DrawString(scode, ft, solidBrush, 0, 0);
            context.Response.ContentType = "image/jpg";
            Bmp.Save(context.Response.OutputStream, ImageFormat.Jpeg);
            //向外传scode的值以验证
            context.Session["check"] = scode;
        }
 
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

到此这篇关于基于ASP.NET实现验证码生成详解的文章就介绍到这了,更多相关ASP.NET验证码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Visual Studio 2017安装使用教程

    Visual Studio 2017安装使用教程

    这篇文章主要为大家详细介绍了Visual Studio 2017安装使用教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • ASP.NET比较常用的26个性能优化技巧

    ASP.NET比较常用的26个性能优化技巧

    这篇文章主要给大家介绍asp.net中比较常用的26个性能优化技巧,主要设计到asp.net中常用的26个性能优化方面的内容,对于asp.net中常用的26个性能优化技巧感兴趣的朋友可以参考下本篇文章
    2015-10-10
  • ASP.NET Core中如何利用Csp标头对抗Xss攻击

    ASP.NET Core中如何利用Csp标头对抗Xss攻击

    这篇文章主要给大家介绍了关于ASP.NET Core中如何利用Csp标头对抗Xss攻击的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用ASP.NET Core具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • ASP.NET MVC中使用jQuery时的浏览器缓存问题详解

    ASP.NET MVC中使用jQuery时的浏览器缓存问题详解

    这篇文章主要介绍了ASP.NET MVC中使用jQuery时的浏览器缓存问题详解,需要的朋友可以参考下。
    2016-06-06
  • ASP.NET Core文件压缩常见使用误区(最佳实践)

    ASP.NET Core文件压缩常见使用误区(最佳实践)

    本文给大家分享ASP.NET Core文件压缩常见的三种误区,就每种误区给大家讲解的非常详细,是项目实践的最佳纪录,对ASP.NET Core文件压缩相关知识感兴趣的朋友一起看看吧
    2021-05-05
  • 通过RadioButton对DataList控件进行单选实例说明

    通过RadioButton对DataList控件进行单选实例说明

    本例实现通过RadioButton对DataList控件进行单选,aspx拉一个DataList控件,把RadioButton置于DataList的ItemTemplate模版内;在.aspx.cs内为DataList控件绑定数据,很实用的功能,感兴趣的朋友可以了解下啊
    2013-01-01
  • 一个简单的自定义程序日志小样例

    一个简单的自定义程序日志小样例

    前面一篇文章大概说了下自己对日志的一点理解,可能不太直观,这里再附上一个简单的使用例子,以作为对之前的补充,例子比较简单,所以直接看注释即可。
    2009-07-07
  • 实现DataGridView控件中CheckBox列的使用实例

    实现DataGridView控件中CheckBox列的使用实例

    最近做WindowsForms程序,使用DataGridView控件时,加了一列做选择用,发现CheckBox不能选中。搜索后,要实现DataGridView的CellContentClick事件,将代码贴一下
    2014-01-01
  • .NET/C#如何使用反射注册事件详解

    .NET/C#如何使用反射注册事件详解

    反射是.NET中的重要机制,下面这篇文章主要给大家介绍了关于.NET/C#如何使用反射注册事件的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-09-09
  • 调试ASP.NET应用程序的方法和技巧

    调试ASP.NET应用程序的方法和技巧

    调试ASP.NET应用程序的方法和技巧...
    2006-09-09

最新评论