ASP.NET1.1验证码产生的原理及应用是怎样的

技术ASP.NET1.1验证码产生的原理及应用是怎样的今天就跟大家聊聊有关ASP.NET1.1验证码产生的原理及应用是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有

今天,我将和你谈谈ASP的原理和应用。NET1.1验证码生成,可能很多人不太懂。为了让大家更好的了解,边肖为大家总结了以下内容,希望大家能从这篇文章中有所收获。

ASP.NET1.1验证码实现原理

通过随机函数生成验证码元素,将数字验证码元素转换为字符类型后连接成字符串,并将验证码字符串写入Cookie中进行验证调用。

通过在背景中动态绘制位图来绘制指定大小的位图,然后在空白处绘制底纹、验证码字体和边框。

ASP.NET1.1验证码实现代码

(1)登录页面前台

“% @”页面语言=“c#”代码隐藏=“log in . aspx . cs”autoeventwireup=“false”inherits=“Validator”。登录“%!DOCTYPEHTMLPUBLIC '-//W3C//DTDHTML 4.0 transitional//EN ' HTMlheadtitle log in/title meta name=' GENERATOR ' content=' MicroSoft visualSTudio。NET7.1“元名称=‘CODE _ LANGUAGE’content=‘c#’元名称=‘vs _ defaultClientScript’content=‘JavaScript’元名称=‘vs _ targetSchema’content=‘http://schemas . Microsoft.com/intellisense/ie5’/headsdyms _ POSITIONING=‘GridLayout’formid=‘form 1’method=‘post’runat=‘server’asp3360 buttonid=‘button 1’style=‘Z-index 3360101;LEFT:128px位置:绝对;top :64 px ' runat=' server ' width=' 96px ' text=' submit '/ASP 3360 button n

bsp;          < IMG src="CheckCode.aspx">              < asp:label id="lblMessage" style="Z-INDEX: 102; LEFT: 16px; POSITION: absolute; TOP: 128px"                 runat="server">< /asp:label>              < asp:textbox id="txtCheckCode" style="Z-INDEX: 103; LEFT: 16px; POSITION: absolute; TOP: 64px"                 runat="server" Width="88px">< /asp:textbox>          < /form>      < /body>  < /HTML>

(2)Login.aspx.cs(登录页后台)

using System;  using System.Collections;  using System.ComponentModel;  using System.Data;  using System.Drawing;  using System.Web;  using System.Web.SessionState;  using System.Web.UI;  using System.Web.UI.WebControls;  using System.Web.UI.HtmlControls;   namespace Validator  {      /**//// < summary>      /// Login 的摘要说明。      /// < /summary>      public class Login : System.Web.UI.Page      {          protected System.Web.UI.WebControls.Button Button1;          protected System.Web.UI.WebControls.Label lblMessage;          protected System.Web.UI.WebControls.TextBox txtCheckCode;                private void Page_Load(object sender, System.EventArgs e)          {              // 在此处放置用户代码以初始化页面          }           Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码          override protected void OnInit(EventArgs e)          {              //              // CODEGEN: 该调用是 asp.net Web 窗体设计器所必需的。              //              InitializeComponent();              base.OnInit(e);          }                    /**//// < summary>          /// 设计器支持所需的方法 - 不要使用代码编辑器修改          /// 此方法的内容。          /// < /summary>          private void InitializeComponent()          {                  this.Button1.Click += new System.EventHandler(this.Button1_Click);              this.Load += new System.EventHandler(this.Page_Load);           }          #endregion           private void Button1_Click(object sender, System.EventArgs e)          {              if(Request.Cookies["CheckCode"] == null)               {                  lblMessage.Text = "您的浏览器设置已被禁用 Cookies,您必须设置浏览器允许使用 Cookies 选项后才能使用本系统。";                  lblMessage.Visible = true;                  return;              }              if(String.Compare(Request.Cookies["CheckCode"].Value, txtCheckCode.Text, false) != 0) //参数为false时为区分大小写              {                  lblMessage.Text = "验证码错误,请输入正确的验证码。";                  lblMessage.Visible = true;                  return;              }               else               {                  lblMessage.Text = "通过验证";                  lblMessage.Visible = true;                  return;              }          }      }  }

(3) CheckCode.aspx(验证页前台)

< %@ Page language="c#" Codebehind="CheckCode.aspx.cs" AutoEventWireup="false" Inherits="Validator.CheckCode" %>  < !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >    < html>    < head>      < title>CheckCode< /title>      < meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">      < meta name="CODE_LANGUAGE" Content="C#">      < meta name=vs_defaultClientScript content="JavaScript">      < meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">    < /head>    < body MS_POSITIONING="GridLayout">            < form id="Form1" method="post" runat="server">          < FONT face="宋体">< /FONT>      < /form>          < /body>  < /html>

(4)CheckCode.aspx.cs(验证页后台)

using System;  using System.Collections;  using System.ComponentModel;  using System.Data;  using System.Drawing;  using System.Web;  using System.Web.SessionState;  using System.Web.UI;  using System.Web.UI.WebControls;  using System.Web.UI.HtmlControls;   namespace Validator  {      /**//// < summary>      /// CheckCode 的摘要说明。      /// < /summary>      public class CheckCode : System.Web.UI.Page      {          private void Page_Load(object sender, System.EventArgs e)          {              // 在此处放置用户代码以初始化页面              this.CreateCheckCodeImage(GenerateCheckCode());          }           Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码          override protected void OnInit(EventArgs e)          {              //              // CODEGEN: 该调用是 asp.net Web 窗体设计器所必需的。              //              InitializeComponent();              base.OnInit(e);          }                    /**//// < summary>          /// 设计器支持所需的方法 - 不要使用代码编辑器修改          /// 此方法的内容。          /// < /summary>          private void InitializeComponent()          {                  this.Load += new System.EventHandler(this.Page_Load);          }          #endregion           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();                                   //如果随机数是偶数 取余选择从[0-9]                                               if(number % 2 == 0)                                                          code = (char)('0' + (char)(number % 10));                                               else                                               //如果随机数是奇数 选择从[A-Z]                                                          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< 60; i++)                                               {                                                          int x = random.Next(image.Width);                                                          int y = random.Next(image.Height);                                                           image.SetPixel(x, y, Color.FromArgb(random.Next()));                                               }                                   //把产生的随机数以字体的形式写入画面                                               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);                                                //画图片的边框线                                               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();                                    }                         }      }  }

ASP.NET1.1验证码主要函数分析

1、通过随机函数(Random)先产生验证码组成元素(这里为五位) 并将其转换为字符串(属性为只读),完成后写入“Cookie”中去以供验证时调用。

2、将验证码字符串写入图形:

(1)建立一个位图文件确定长和宽:

System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);

(a)System.Drawing. [C#] Bitmap(int width,int height);

(b)double Math.Ceiling (double a):返回大于或等于指定数字的最小整数。

(2)画图片的背景噪音点(60个):

for(int i=0; i< 60; i++)  {   int x = random.Next(image.Width);   int y = random.Next(image.Height);   image.SetPixel(x, y, Color.FromArgb(random.Next()));   }

(a) public virtual int Next(int maxValue);返回一个小于所指定***值的非负随机数。 参数:maxValue-要生成的随机数的上限。maxValue 必须大于或等于零。

(b) image.SetPixel(int x,int y,Color color); 参数: x-要设置的像素的 x 坐标;y-要设置的像素的 y 坐标;color-Color 结构,它表示要分配给指定像素的颜色。

(c) Color.FromArgb(int argb) 参数:argb-指定 32 位 ARGB 值的值。

(3)把产生的随机数以字体的形式写入位图:Graphics.DrawString(string s,Font font,Brush brush,float x,float y);

参数:s-要绘制的字符串;font-Font 对象,它定义字符串的文本格式;

brush-Brush 对象,它确定所绘制文本的颜色和纹理;

x-所绘制文本的左上角的 x 坐标;

y-所绘制文本的左上角的 y 坐标。(在指定位置并且用指定的 Brush 和 Font 对象绘制指定的文本字符串)

(4) 画图片的边框线: public void DrawRectangle(Pen pen, int x, int y, int width, int height);绘制由坐标对、宽度和高度指定的矩形。

参数:pen-Pen 对象,它确定矩形的颜色、宽度和样式;

x-要绘制的矩形的左上角的 x 坐标;

y-要绘制的矩形的左上角的 y 坐标;

width-要绘制的矩形的宽度;height-要绘制的矩形的高度。

(5) 将图片以二进制流的方式输出加上格式并可显示出来。

看完上述内容,你们对ASP.NET1.1验证码产生的原理及应用是怎样的有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/119733.html

(0)

相关推荐

  • Canal Instance 设计理念与定制开发思路是什么

    技术Canal Instance 设计理念与定制开发思路是什么这篇文章将为大家详细讲解有关Canal Instance 设计理念与定制开发思路是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后

    攻略 2021年10月21日
  • 如何连接Flex数据库行

    技术如何连接Flex数据库行这篇文章主要介绍如何连接Flex数据库行,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Flex应用程序并不直接与一个Flex数据库进行连接,所以你需要使用某种类型的服务

    攻略 2021年12月9日
  • MySQL外键约束简介

    技术MySQL外键约束简介 MySQL外键约束简介InnoDB是目前MySQL中唯一支持外键的内置存储引擎,所以如果需要外键支持那选择 就不多了(PBXT也有外键支持)。使用外键是有成本的。比如外键通常

    礼包 2021年11月13日
  • toekn登陆身份验证流程

    技术toekn登陆身份验证流程 toekn登陆身份验证流程一、 token身份验证
    基于token验证时无状态[*]的,我们不能将信息存储到服务器中,因为当客户每次发起验证请求时,服务器需要去创建一个记

    礼包 2021年12月9日
  • 用家里的东西做起泡胶,怎么用家里的材料做起泡胶

    技术用家里的东西做起泡胶,怎么用家里的材料做起泡胶第一步:首先加入白胶用家里的东西做起泡胶,白胶的量90%决定了之后成品的大小,不能倒多或倒少哦!新手宝宝要注意了,市场上面的白胶,花样繁多,且价格上下浮动很大,有很便宜的

    生活 2021年11月1日
  • 川菜家常菜,川菜有哪些著名的家常菜

    技术川菜家常菜,川菜有哪些著名的家常菜要说美食川菜家常菜,四川是必不可少的。大家都知道四川人的生活节奏总体来说比较慢,是比较乐于享受的人。对于吃的东西,更是讲究。四川的美食更是吸引了很多人来四川旅游。每一个地界都有自己喜

    生活 2021年10月22日