gpt4 book ai didi

asp.net使用ashx生成图形验证码的方法示例

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 28 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章asp.net使用ashx生成图形验证码的方法示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例讲述了asp.net使用ashx生成图形验证码的方法。分享给大家供大家参考,具体如下:

验证码的好处不用我多说,你们都懂的。我在网上看到有人把验证码直接写在aspx页面里,也就是说这种方式请求验证码等于请求一个页面,这样做很不科学。如下所示 。

?
1
2
3
4
5
6
7
8
< form id = "form1" runat = "server" >
   < div >
     < asp:Image ID = "Image1" runat = "server" ImageUrl = "Default.aspx" />
     < br />
     < asp:TextBox ID = "TextBox1" runat = "server" ></ asp:TextBox >
     < asp:Button ID = "Button1" runat = "server" onclick = "Button1_Click" Text = "Button" />
   </ div >
</ form >

这个代码看着就觉得写代码的人比较欠揍,代码写成这样子着实郁闷。验证吗也不写点script做下切换.

下面我介绍一种方式来实现这样的功能 。

1. 写个ashx生成图形验证码 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
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.Web.SessionState;
using System.Drawing;
namespace usechecknum.ashx
{
   /// <summary>
   /// $codebehindclassname$ 的摘要说明
   /// </summary>
   [WebService(Namespace = "http://tempuri.org/" )]
   [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
   public class doCreateNum : IHttpHandler,IRequiresSessionState
   {
     public void ProcessRequest(HttpContext context)
     {
       context.Response.ContentType = "text/html" ;
       string checkCode = GetValidation(5); // 产生5位随机验证码字符
       context.Session[ "Code" ] = checkCode; //将字符串保存到Session中,以便需要时进行验证
       System.Drawing.Bitmap image = new System.Drawing.Bitmap(70, 22);
       Graphics g = Graphics.FromImage(image);
       try
       {
         //生成随机生成器
         Random random = new Random();
         //清空图片背景色
         g.Clear(Color.White);
         // 画图片的背景噪音线
         int i;
         for (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.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);
         context.Response.ClearContent();
         context.Response.ContentType = "image/Gif" ;
         context.Response.BinaryWrite(ms.ToArray());
       }
       finally
       {
         g.Dispose();
         image.Dispose();
       }
     }
     public string GetValidation( int num)
     {
       string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; //"或者写汉字也行"
       string validatecode = "" ;
       Random rd = new Random();
       for ( int i = 0; i < num; i++)
       {
         validatecode += str.Substring(rd.Next(0, str.Length), 1);
       }
       return validatecode;
     }
     public bool IsReusable
     {
       get
       {
         return false ;
       }
     }
   }
}

2. 在页面上显示验证码,因为我们生成的是图形,所以可以直接写在<img/>标签里,我们只要写段简单的脚本就可以点击鼠标切换验证码了 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ Page Language= "C#" AutoEventWireup= "true" CodeBehind= "index.aspx.cs" Inherits= "usechecknum._Default" %>
<!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>
<script language= "javascript" type= "text/javascript" >
   function changeCode() {
     var imgNode = document.getElementById( "vimg" );
     imgNode.src = "ashx/doCreateNum.ashx?t=" + ( new Date()).valueOf(); // 这里加个时间的参数是为了防止浏览器缓存的问题
   }
   </script>
<body>
   <form id= "form1" runat= "server" >
    请输入验证码:<input type= "text" name= "checknum" /><img src= "ashx/doCreateNum.ashx" id= "vimg" onclick= "changeCode()" />
   </form>
</body>
</html>

说了半天,该是时候看看生成的验证码长什么样了 。

asp.net使用ashx生成图形验证码的方法示例

希望本文所述对大家asp.net程序设计有所帮助.

最后此篇关于asp.net使用ashx生成图形验证码的方法示例的文章就讲到这里了,如果你想了解更多关于asp.net使用ashx生成图形验证码的方法示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com