ASP.NET验证码(3种)

 更新时间:2021年9月22日 10:10  点击:2072

日常生活中我们在使用网站时都会遇到验证码,大家有没有想过为什么要使用验证码?

其实验证码的作用就是防止恶意破解密码、刷票、论坛灌水、刷页。有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试。今天就跟大家分享ASP.NET的三种验证码。

1.GSC_WebControlLibrary 这是在网上找到的一个控件,非常好用。但是效果不是特别好(见下图。
)虽然容易使用,所有的属性都可以像控件一样设置,但是可用性不太高。用户不能自定义,而且看起来这个验证码效果不太好。

效果:

2.用一个页面生成图片,另一个页面调用,验证码存入cookie,调用时取cookie对比验证.这个用户就可以按自己的喜好更改效果和验证码的长度了。

效果如图:

CheckCode.aspx代码如下:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

public partial class Tools_CheckCode : System.Web.UI.Page
{
 protected void Page_Load(object sender, EventArgs e)
 {
  this.CreateCheckCodeImage(GenerateCheckCode());

 }

 private string GenerateCheckCode()
 {
  int number;
  char code;
  string checkCode = String.Empty;

  System.Random random = new Random();

  for (int i = 0; i < 5; i++)
  {
   number = random.Next();

   if (number % 2 == 0)
    code = (char)('0' + (char)(number % 10));
   else
    code = (char)('A' + (char)(number % 26));

   checkCode += code.ToString();
  }

  Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));

  return checkCode;
 }

 private void CreateCheckCodeImage(string checkCode)
 {
  if (checkCode == null || checkCode.Trim() == String.Empty)
   return;

  System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
  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.GreenYellow), x1, y1, x2, y2);
   }

   Font font = new System.Drawing.Font("Verdana", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
   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);

   //画图片的前景噪音点
   for (int i = 0; i < 80; i++)
   {
    int x = random.Next(image.Width);
    int y = random.Next(image.Height);

    image.SetPixel(x, y, Color.FromArgb(random.Next()));
   }

   //画图片的边框线
   g.DrawRectangle(new Pen(Color.Red), 0, 0, image.Width - 1, image.Height - 1);

   System.IO.MemoryStream ms = new System.IO.MemoryStream();
   image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
   Response.ClearContent();
   Response.ContentType = "image/Gif";
   Response.BinaryWrite(ms.ToArray());
  }
  finally
  {
   g.Dispose();
   image.Dispose();
  }
 }


}

然后在需要使用的页面引用:
UseCheckCode.aspx

<img src="Tools/CheckCode.aspx" alt="验证码" style="width: 60px; height: 24px" />

3.用web handler生成图片。这个其实和前面的意思大致差不多,调用方法也基本和2一样,不同的是,它的验证码是存入Session的。供学习参考。

效果图如下:

ValidateImageHandler.ashx

%@ WebHandler Language="C#" Class="ValidateImageHandler" %>

using System;
using System.Web;
using System.Web.SessionState;
using System.Drawing;
using System.Drawing.Imaging;
using System.Text;

/// <summary>
/// ValidateImageHandler 生成网站验证码功能
/// </summary>
public class ValidateImageHandler : IHttpHandler, IRequiresSessionState
{
 int intLength = 5;    //长度
 string strIdentify = "Identify"; //随机字串存储键值,以便存储到Session中
 public ValidateImageHandler()
 {  
 }

 /// <summary>
 /// 生成验证图片核心代码
 /// </summary>
 /// <param name="hc"></param>
 public void ProcessRequest(HttpContext hc)
 {
  //设置输出流图片格式
  hc.Response.ContentType = "image/gif";
  
  Bitmap b = new Bitmap(200, 60);
  Graphics g = Graphics.FromImage(b);
  g.FillRectangle(new SolidBrush(Color.YellowGreen), 0, 0, 200, 60);
  Font font = new Font(FontFamily.GenericSerif, 48, FontStyle.Bold, GraphicsUnit.Pixel);
  Random r = new Random();

  //合法随机显示字符列表
  string strLetters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
  StringBuilder s = new StringBuilder();
  
  //将随机生成的字符串绘制到图片上
  for (int i = 0; i < intLength; i++)
  {
   s.Append(strLetters.Substring(r.Next(0, strLetters.Length - 1), 1));
   g.DrawString(s[s.Length - 1].ToString(), font, new SolidBrush(Color.Blue), i * 38, r.Next(0, 15));
  }

  //生成干扰线条
  Pen pen = new Pen(new SolidBrush(Color.Blue), 2);
  for (int i = 0; i < 10; i++)
  {
   g.DrawLine(pen, new Point(r.Next(0, 199), r.Next(0, 59)), new Point(r.Next(0, 199), r.Next(0, 59)));
  }
  b.Save(hc.Response.OutputStream, ImageFormat.Gif);
  hc.Session[strIdentify] = s.ToString(); //先保存在Session中,验证与用户输入是否一致
  hc.Response.End();
 
 }
 
 /// <summary>
 /// 表示此类实例是否可以被多个请求共用(重用可以提高性能)
 /// </summary>
 public bool IsReusable
 {
  get
  {
   return true;
  }
 }
}

以上就是ASP.NET3种验证码,各有各的优缺点,希望大家可以熟练实现不同验证码的功能。

[!--infotagslink--]

相关文章

  • ASP.NET购物车实现过程详解

    这篇文章主要为大家详细介绍了ASP.NET购物车的实现过程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-22
  • 在ASP.NET 2.0中操作数据之七十二:调试存储过程

    在开发过程中,使用Visual Studio的断点调试功能可以很方便帮我们调试发现程序存在的错误,同样Visual Studio也支持对SQL Server里面的存储过程进行调试,下面就让我们看看具体的调试方法。...2021-09-22
  • PHP 验证码不显示只有一个小红叉的解决方法

    最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
  • jQuery Real Person验证码插件防止表单自动提交

    本文介绍的jQuery插件有点特殊,防自动提交表单的验证工具,就是我们经常用到的验证码工具,先给大家看看效果。效果图如下: 使用说明 需要使用jQuery库文件和Real Person库文件 同时需要自定义验证码显示的CSS样式 使用实例...2015-11-08
  • JS实现随机生成验证码

    这篇文章主要为大家详细介绍了JS实现随机生成验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-06
  • ASP.NET Core根据环境变量支持多个 appsettings.json配置文件

    这篇文章主要介绍了ASP.NET Core根据环境变量支持多个 appsettings.json配置文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22
  • 记一次EFCore类型转换错误及解决方案

    这篇文章主要介绍了记一次EFCore类型转换错误及解决方案,帮助大家更好的理解和学习使用asp.net core,感兴趣的朋友可以了解下...2021-09-22
  • Jquery插件实现点击获取验证码后60秒内禁止重新获取

    通过jquery.cookie.js插件可以快速实现“点击获取验证码后60秒内禁止重新获取(防刷新)”的功能效果图:先到官网(http://plugins.jquery.com/cookie/)下载cookie插件,放到相应文件夹,代码如下:复制代码 代码如下: <!DOCTYPE ht...2015-03-15
  • php实现点击可刷新验证码

    验证码类文件 CreateImg.class.php <&#63;php class ValidationCode { private $width,$height,$codenum; public $checkcode; //产生的验证码 private $checkimage; //验证码图片 private $disturbColor = ''; /...2015-11-08
  • 基于JavaScript实现验证码功能

    这篇文章主要介绍了基于JavaScript实现验证码功能的相关资料...2017-04-03
  • 详解ASP.NET Core 中基于工厂的中间件激活的实现方法

    这篇文章主要介绍了ASP.NET Core 中基于工厂的中间件激活的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-22
  • Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法

    这篇文章主要介绍了Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-06-24
  • 单击按钮发送验证码,出现倒计时的简单实例

    下面小编就为大家带来一篇单击按钮发送验证码,出现倒计时的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 代码...2017-07-06
  • PHP验证码生成与验证例子

    验证码是一个现在WEB2.0中常见的一个功能了,像注册、登录又或者是留言页面,都需要注册码来验证当前操作者的合法性,我们会看到有些网站没有验证码,但那是更高级的验证了,...2016-11-25
  • asp.net通过消息队列处理高并发请求(以抢小米手机为例)

    这篇文章主要介绍了asp.net通过消息队列处理高并发请求(以抢小米手机为例),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-09-22
  • 基于Pytorch版yolov5的滑块验证码破解思路详解

    这篇文章主要介绍了基于Pytorch版yolov5的滑块验证码破解思路详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-25
  • jQuery实现发送验证码控制按钮禁用功能

    最近接到新需求,需要实现一个点击发送验证码之后,按钮禁用,在5秒之后取消禁用,看似需求很简单,实现起来还真的好好动动脑筋,下面小编把jquery控制按钮禁用核心代码分享给大家,需要的朋友参考下吧...2021-07-24
  • ASP.NET单选按钮控件RadioButton常用属性和方法介绍

    RadioButton又称单选按钮,其在工具箱中的图标为 ,单选按钮通常成组出现,用于提供两个或多个互斥选项,即在一组单选钮中只能选择一个...2021-09-22
  • ASP.NET 2.0中的数据操作:使用两个DropDownList过滤的主/从报表

    在前面的指南中我们研究了如何显示一个简单的主/从报表, 该报表使用DropDownList和GridView控件, DropDownList填充类别,GridView显示选定类别的产品. 这类报表用于显示具有...2016-05-19
  • 工信部的ICP备案网站登录时验证码一直输入不正确怎么回事

    工信部的ICP备案网站登录时验证码一直输入不正确怎么回事,为了防止一些机器采集人工信部对于查询验证做得识别度极低,所以许多的朋友都会发现输入验证码一直有问题了,那...2016-10-10