• 随机验证码.ashx


    ValidateCode.ashx

    <%@ WebHandler Language="C#" class="ValidateCode" %>

    using System;
    using System.Collections;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    using System.Xml.Linq;
    using System.Drawing.Drawing2D;
    using System.Drawing;

        public class ValidateCode : IHttpHandler
        {
            public void ProcessRequest(HttpContext context)
            {
                context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
                this.CreateCheckCodeImage(GenerateCheckCode(context), context);
            }
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
            private string GenerateCheckCode(HttpContext context)
            {
                int number;
                char code;
                string checkCode = String.Empty;

                System.Random random = new Random();

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

                    if (number % 2 == 0)
                        code = (char)('0' + (char)(number % 10));
                    else if (number % 3 == 0)
                        code = (char)('A' + (char)(number % 26));
                    else
                        code = (char)('a' + (char)(number % 26));
                    checkCode += code.ToString();
                }

                context.Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));
                //也可以存到Seesion里.        
                //context.Session["CheckCode"] = checkCode;   
                return checkCode;
            }
            private void CreateCheckCodeImage(string checkCode, HttpContext context)
            {
                if (checkCode == null || checkCode.Trim() == String.Empty)
                    return;
                Bitmap image = new 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);
                    context.Response.ClearContent();
                    context.Response.ContentType = "image/Gif";
                    context.Response.BinaryWrite(ms.ToArray());
                }
                finally
                {
                    g.Dispose();
                    image.Dispose();
                }

            }
        }
    }


    页面:

           <img src="ValidateCode.ashx" title="看不清?点击刷新" style="cursor:pointer" onclick="this.src='ValidateCode.ashx?_='+Math.random()">     

    后台代码:

    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;

        public partial class Default : System.Web.UI.Page  

       {        

    protected void Page_Load(object sender, EventArgs e)        

    {

            }

            protected void Button1_Click(object sender, EventArgs e)  

           {         

        if (Request.Cookies["CheckCode"] == null)        

         {           

          lblMessage.Text = "您的浏览器设置已被禁用 Cookies,您必须设置浏览器允许使用 Cookies 选项后才能使用本系统。";          

           lblMessage.Visible = true;       

              return;           

      }

                if (String.Compare(Request.Cookies["CheckCode"].Value, txtCheckCode.Text, true) != 0)     

            {          

           lblMessage.Text = "验证码错误,请输入正确的验证码。";    

                 lblMessage.Visible = true;      

               return;       

          }

     //在这执行下一步     

                                    //CheckCode是存到Session里的       

          //if (Session["CheckCode"] != null)             //{             //    if (String.Compare(Session["CheckCode"].ToString(), txtCheckCode.Text.Trim(), true) != 0)             //    {             //        lblMessage.Text = "验证码错误,请输入正确的验证码。";             //        lblMessage.Visible = true;             //        return;             //    }             //    else             //    {//在这执行下一步             //    }             //}         }     }

  • 相关阅读:
    前端下载图片到本地
    小程序复制文本
    小程序的分享
    vue简单的父子组件之间传值
    git新的远程分支同步到本地
    C#使用RabbitMq队列(Sample,Work,Fanout,Direct等模式的简单使用)
    别再眼高手低了! 这些Linq方法都清楚地掌握了吗?
    Asp.NetCore 3.1 使用AutoMapper自动映射转换实体 DTO,Data2ViewModel
    .NetCore使用Redis,StackExchange.Redis队列,发布与订阅,分布式锁的简单使用
    core的 Linq基本使用,简单模拟数据库多表的左右内连接的测试
  • 原文地址:https://www.cnblogs.com/quwujin/p/5395565.html
Copyright © 2020-2023  润新知