主要用到一个类,一个aspx页面,还有一个使用图片验证码的aspx页面。
随机图片生成类:
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;

namespace Sooyie.Common
{
    /// <summary>
    /// 产生随即图片
    /// </summary>
    public sealed class RandImage
    {
        private const string RandCharString = "0123456789";
        private int width;
        private int height;
        private int length;
        /// <summary>
        /// 默认构造函数,生成的图片宽度为48×24,随即字符串字符个数
        /// </summary>
        public RandImage():this(48,24,4)
        {
        }
        /// <summary>
        /// 指定生成图片的宽和高,默认生成图片的字符串长度为4个字符
        /// </summary>
        /// <param name="width"></param>
        /// <param name="height"></param>
        public RandImage(int width, int height):this(width,height,4)
        {
        }
        /// <summary>
        /// 指定生成图片的宽和高以及生成图片的字符串字符个数
        /// </summary>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <param name="length"></param>
        public RandImage(int width, int height, int length)
        {
            this.width = width;
            this.height = height;
            this.length = length;
        }
        /// <summary>
        /// 以默认的大小和默认的字符个数产生图片
        /// </summary>
        /// <returns></returns>
        public Image GetImage()
        {
            Bitmap p_w_picpath = new Bitmap(width, height);
            Graphics g = Graphics.FromImage(p_w_picpath);
            g.Clear(Color.White);
            string randString = "";
            Random random=new Random();
            do
            {

//使用DateTime.Now.Millisecond作为生成随机数的参数,增加随机性
                randString += RandCharString.Substring(random.Next(DateTime.Now.Millisecond)%RandCharString.Length, 1);
            }
            while (randString.Length < 4);
            float emSize=(float)width/randString.Length;
            Font font = new Font("Arial", emSize, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
            Pen pen = new Pen(Color.Silver);
            #region 画图片的背景噪音线
            int x1,y1,x2,y2;
            
            for (int i = 0; i < 25; i++)
            {
                x1 = random.Next(p_w_picpath.Width);
                y1 = random.Next(p_w_picpath.Height);
                x2 = random.Next(p_w_picpath.Width);
                y2 = random.Next(p_w_picpath.Height);
                g.DrawLine(pen, x1, y1, x2, y2);
            }
            #endregion

#region 画图片的前景噪音点
            for (int i = 0; i < 100; i++)
            {
                x1 = random.Next(p_w_picpath.Width);
                y1 = random.Next(p_w_picpath.Height);
                p_w_picpath.SetPixel(x1, y1, Color.FromArgb(random.Next(Int32.MaxValue)));
            }
            #endregion

g.DrawString(randString, font, Brushes.Red, 2, 2);
            g.Dispose();
            return p_w_picpath;
            
        }
    }
}

将图片转换成html资源的aspx页面,这个页面前台没有任何代码,主要后台(.cs)的功能。
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.IO;
using System.Drawing;
using System.Drawing.Imaging;
using Sooyie.Common;

public partial class CheckImage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            RandImage randImage=new RandImage();
            System.Drawing.Image p_w_picpath = randImage.GetImage();
            System.IO.MemoryStream memoryStream = new MemoryStream();
            p_w_picpath.Save(memoryStream, ImageFormat.Jpeg);
            Response.ClearContent();
            Response.ContentType = "p_w_picpath/gif";
            Response.BinaryWrite(memoryStream.ToArray());
            p_w_picpath.Dispose();
            Response.End();
        }
    }
}

下面是怎么使用的例子:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Admin_Login" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>后台管理用户登录</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <table border="0" cellpadding="0" cellspacing="0" width="480">
        <tr>
            <td colspan="2" align="center">
                公文管理系统后台登陆</td>
        </tr>
        <tr>
            <td style="width: 83px">
                用户名</td><td>
                <asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtUserName"
                        ErrorMessage="用户名"></asp:RequiredFieldValidator></td>
        </tr>
        <tr>
            <td style="height: 19px; width: 83px;">
                密码</td><td>
                <asp:TextBox ID="txtPassword" runat="server" TextMode="Password"></asp:TextBox>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="txtPassword"
                        ErrorMessage="密码"></asp:RequiredFieldValidator></td>
        </tr>
        <tr>
            <td style="height: 19px; width: 83px;">
                校验码</td><td>
                <asp:TextBox ID="txtCheckCode" runat="server"></asp:TextBox><img src="CheckImage.aspx" alt="校验码" />
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="txtCheckCode"
                        ErrorMessage="校验码必填"></asp:RequiredFieldValidator></td>
        </tr>
        <tr>
            <td style="width: 83px">
                <asp:Button ID="btnLogin" runat="server" Text="登陆" OnClick="btnLogin_Click" /></td><td style="width: 9px">
                    <input id="Reset1" type="reset" value="清除" /></td>
        </tr>
    </table>
    </div>
        <asp:Literal ID="lStatus" runat="server" Visible="False"></asp:Literal>
    </form>
</body>
</html>

请注意:<img src="CheckImage.aspx" alt="校验码" />这一句就使用了CheckImage.aspx.cs类中的功能,将图片通过HTTP输出。

转载于:https://blog.51cto.com/zhoufoxcn/166995

asp.net中验证码的实现相关推荐

  1. ASP.NET中Image控件不能自动刷新

    问题描述:无论是本地VS 调试环境还是IIS 测试环境,验证码都可以随机显示,问题是部署到客户的空间上时,验证码点击看不清楚,需要重新刷新的时候,图片验证码依旧是原来的那张,用ashx 的方式跟直接通 ...

  2. ASP生成BMP验证码图片

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% '''''''''''''''''''''''''' ...

  3. asp.net ajax怎样传值,JQuery在asp.net中三种ajax传值

    1)通过webservice,注意去掉注释[System.Web.Script.Services.ScriptService]这行前的注释 2)通过aspx.cs文件中的静态方法 3)通过aspx文件 ...

  4. 关于ASP.NET中的session

    文章来源:http://www.cnblogs.com/yinrq/p/5032493.html 此处仅做保存备份之用,如若侵权,请告知删除. 一.概述 Session用于存储特定的用户会话所需的信息 ...

  5. ASP.NET中 RequiredFieldValidator(非空验证)的使用

    ylbtech-ASP.NET-Control-Validator: RequiredFieldValidator(非空验证)的使用 ASP.NET中 RequiredFieldValidator(非 ...

  6. 搜集《ASP.NET中常用的26个优化性能方法》

    1. 数据库访问性能优化 a.数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接 ...

  7. 在ASP.NET中跟踪和恢复大文件下载

    在Web应用程序中处理大文件下载的问题一直出了名的困难,因此对于大多数站点来说,如果用户的下载被中断了,它们只能说悲哀降临到用户的身上了.但是我们现在不必这样了,因为你可以使自己的ASP.NET应用程 ...

  8. ASP.NET中使用MD5和SHA1算法加密

    你的主页或者你管理的网站有各种密码需要保护,把密码直接放在数据库或者文件中存在不少安全隐患,所以密码加密后存储是最常见的做法.在ASP.NET中实现加密非常容易..NET SDK中提供了CookieA ...

  9. ASP.NET中如何防范SQL注入式攻击

    1将sql中使用的一些特殊符号,如' -- /* ; %等用Replace()过滤: 2限制文本框输入字符的长度: 3检查用户输入的合法性:客户端与服务器端都要执行,可以使用正则. 4使用带参数的SQ ...

最新文章

  1. [C] 层层递进——C语言实现广度优先搜索
  2. 响应式Spring Cloud初探
  3. 删除链表重复节点 python_java删除链表中重复的节点(保留一个节点)
  4. 组件化实践详解(二)
  5. 你聚类个数是靠拍的?
  6. jsp文件的请求是如何被服务器的JSP容器转换成静态网页的
  7. java流换行符方法_java换行符的使用方法
  8. java 从控制台读取_转载 java从控制台读取输入的方法
  9. ActiveMQ使用spring JmsTemplate发送消息(一)
  10. 01.轮播图之四 :imageViews(2 或者 3 个imageview) 轮播
  11. 删除mysql临时文件_mysql自动备份数据库与自动删除临时文件
  12. ipoo3可以用鸿蒙,vivo新机入网!支持44W快充 配置与iQOO Neo3类似
  13. 图像数据流识别圆形_python opencv :使用Hough变换检测圆形,数钱。
  14. 拓端tecdat|数据视域下图书馆话题情感分析
  15. 【数字基带信号】基于matlab三阶高密度双极型码【含Matlab源码 990期】
  16. 小任务:简单实现银行业务系统(附 ideal编辑器固定序列化版本方法)
  17. 内存卡linux系统格式化,SD卡无法格式化怎么办的解决方法
  18. 输入中文错误:\xE4\xBB\x8E\xE5\x85\xA5...‘ for column ‘detail‘ at row 1
  19. OSChina 新年乱弹 ——爱你们,新年快乐
  20. 2023江苏大学计算机考研信息汇总

热门文章

  1. GC 年轻代 老年代 持久代
  2. 小米手机调用系统截图挂掉问题
  3. 背景色透明,里面内容(图片、文字)不透明
  4. 这4种分析方法,大牛产品经理都在用
  5. IAR集成开发环境的使用
  6. synchronized 王的后宫总管,线程是王妃
  7. Spring Boot 2.3.3 稳定版发布!修复了这18个Bug!!
  8. 阿里高级技术专家箫逸:如何画好一张架构图?
  9. JEECG商业版本授权说明(仅限企业用户)
  10. jeecg-mybatis-framework 参考学习版本