1. 新建一个Validate.aspx,然后在Validate.aspx.cs编写代码:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Web;
using System.Drawing;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Drawing.Imaging;
using System.IO;
 
public partial class Validate : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
      this.CreateCheckCodeImage(RndNum());
  }
  private string RndNum()
  {
      int number;
      char code;
      string checkCode = String.Empty;
      System.Random random = new Random();
      for (int i = 0; i < 4; i++)
      {
         number = random.Next();
         if (number % 2 == 0)
            code = (char)('0' + (char)(number % 10));
         else
            code = (char)('A' + (char)(number % 26));
         checkCode += code.ToString();
      }
      Session["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.Silver), x1, y1, x2, y2);
      }
      Font font = new System.Drawing.Font("Arial", 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 < 100; 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.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);
      Response.ClearContent();
      Response.ContentType = "image/Gif";
      Response.BinaryWrite(ms.ToArray());
    }
    finally
    {
      g.Dispose();
      image.Dispose();
    }
  }
}

2. 在前台你想添加的页面添加这段代码:(我这里假设是在登录页面Login.aspx中添加图片验证码)

<img id="ImageCode" src="../Validate.aspx" style="cursor:pointer" onmouseup="RefreshImage()" alt="点击重刷新"/>

还需要在<head>...</head>之间添加这段代码:

<script language ="javascript" type="text/javascript" >
  function RefreshImage()
   {
    var img = document.getElementById("ImageCode"); // 这里的ImageCode就是上面你取图片的Id名字,这里要一致!
    img.src = img.src + '?';
  }
</script>

3. 在后台Login.aspx.cs中添加实现代码:

引用......
public partial class Login : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
  }
  // 登录按钮点击事件处理
  protected void btnLogin_Click(object sender, ImageClickEventArgs e)
  {
    User user = new User();
    user.LoginId = this.txt_LoginId.Text.Trim();
    user.LoginPwd = this.txt_LoginPwd.Text.Trim();
    if (this.txtCode.Text.ToLower() == Session["CheckCode"].ToString().ToLower())
    {
      Response.Redirect("Index.aspx");
      else
      {
        Session["user"] = null;
        this.Page.ClientScript.RegisterStartupScript(this.GetType(), "str", "<script>alert(\"登录失败!!\")</script>");
      }
    }
    else
    {
      this.Page.ClientScript.RegisterStartupScript(this.GetType(), "str", "<script>alert(\"验证码错误!!\")</script>");
    }
  }
  // 新用户注册按钮点击事件处理
  protected void btn_Register_Click(object sender, ImageClickEventArgs e)
  {
    Response.Redirect("Register.aspx");
  }
}

最后运行出来的验证码就是这个样子的~~

当然如果你想实现在其他页面上代码会有些小的变动,但是基本代码就这些~~

Thanks~~

ASP.NET图片验证码学习!的更多相关文章

  1. ASP.NET图片验证码

    1. 新建一个Validate.aspx,然后在Validate.aspx.cs编写代码: using System; using System.Collections; using System.C ...

  2. Java图片验证码学习

  3. asp.net web api实现图片点击式图片验证码

    现在验证码的形式越来越丰富,今天要实现的是在点击图片中的文字来进行校验的验证码,如图 这种验证码验证是验证鼠标是否选中了图片中文字的位置,以及选择的顺序,产生验证码的时候可以提供一组底图,然后随机获取 ...

  4. SpringBoot + Spring Security 学习笔记(三)实现图片验证码认证

    整体实现逻辑 前端在登录页面时,自动从后台获取最新的验证码图片 服务器接收获取生成验证码请求,生成验证码和对应的图片,图片响应回前端,验证码保存一份到服务器的 session 中 前端用户登录时携带当 ...

  5. ASP.NET中图片验证码与js获取验证码的值

    现在的程序中,为了防止用户恶意点击,我们一般都会加上验证,现在比较普遍的是加上图片验证码或者手机短信验证.验证码一般都是防机器不防人,有效的防止了恶意点击. 那么在webform中如何生成动态的图片验 ...

  6. ASP.NET MVC 模块与组件(二)——定制图片验证码

     本着简洁直接,我们就直奔主题吧! 下面是一个生成数字和字母随机组合的验证码类源代码: using System; using System.Drawing; using System.Drawing ...

  7. asp.net core 图片验证码,后台验证

    验证方法: public static string VerificationCodeCacheFormat="vcode_cache_{0}"; public IActionRe ...

  8. ThinkPHP学习(五)图片验证码

    今天用到图片验证码的功能,在网上找到ThinkPHP的下面代码: Public function verify(){ import('think.Image'); Image::buildImageV ...

  9. [Asp.Net Core] 为什么选择 Blazor Server Side (一) 快速实现图片验证码

    关于Blazor 由于在国内, Blazor一点都不普及, 建议读者翻看我之前写的随笔, 了解Blazor Server Side的特点. 在一段时间内, 我会写一些解说分析型的 "为什么选 ...

随机推荐

  1. 安装search everything中文语言包

    Everything 作为很多人的必备工具,特写这篇文章,一方面让想使用国外优秀软件的英语小白有一段过渡期,另一方面也为自己整理下资料.当然,这个可不是不学好英语的正当理由. 步骤: 1. 下载好se ...

  2. smtp协议

    一.smtp命令 1.HELO 向服务器标识用户身份 2.MAIL 初始化邮件传输mail from: <xxx> 3.RCPT 标识单个的邮件接收人:常在MAIL命令后面可有多个rcpt ...

  3. [BZOJ 1875] [SDOI 2009] HH去散步【矩阵乘法】

    题目链接:BZOJ - 1875 题目分析: 这道题如果去掉“不会立刻沿着刚刚走来的路走回”的限制,直接用邻接矩阵跑矩阵乘法就可以了.然而现在加了这个限制,建图的方式就要做一些改变.如果我们把每一条边 ...

  4. 程序员面试宝典题目重温-P1-100

    int f(int x ,int y){    return (x&y) + ((x^y)>>1)} f(729,271)输出是什么? x&y表示按位与,结果是x,y相同位 ...

  5. yii分页

    关于分页有一个重要的类CPagination. CPagination represents information relevant to pagination. http://www.yiifra ...

  6. 【Fiddler】手机抓包

    Fiddler (四) 实现手机的抓包 手机配置了后,Fiddler不开起来就什么也连接不了

  7. 【转】Java集合框架List,Map,Set等全面介绍

    原文网址:http://android.blog.51cto.com/268543/400557 Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含 ...

  8. 福州大学 Problem 2169 shadow

    http://acm.fzu.edu.cn/problem.php?pid=2169 思路:建立一个邻接表,利用搜索中回溯把走过的路标记为1,然后把这些标记为1的值全部加起来. Problem 216 ...

  9. Reverse Words in a String——LeetCode

    Given an input string, reverse the string word by word. For example,Given s = "the sky is blue& ...

  10. Listview加载更多是,恢复到原来的位置,如果不加特殊处理,总是跳转第一条

    1.记录listView滚动到的位置的坐标,然后利用listView.scrollTo精确的进行恢复 listView.setOnScrollListener(new OnScrollListener ...