开发者社区> 技术小甜> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

asp.net中验证码的实现

简介:
+关注继续查看
主要用到一个类,一个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 image 
= new Bitmap(width, height);
            Graphics g 
= Graphics.FromImage(image);
            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(image.Width);
                y1 
= random.Next(image.Height);
                x2 
= random.Next(image.Width);
                y2 
= random.Next(image.Height);
                g.DrawLine(pen, x1, y1, x2, y2);
            }
            
#endregion

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

            g.DrawString(randString, font, Brushes.Red, 
22);
            g.Dispose();
            
return image;
            
        }
    }
}
 将图片转换成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 image 
= randImage.GetImage();
            System.IO.MemoryStream memoryStream 
= new MemoryStream();
            image.Save(memoryStream, ImageFormat.Jpeg);
            Response.ClearContent();
            Response.ContentType 
= "image/gif";
            Response.BinaryWrite(memoryStream.ToArray());
            image.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输出。















本文转自周金桥51CTO博客,原文链接:http://blog.51cto.com/zhoufoxcn/166995 ,如需转载请自行联系原作者




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ASP.NET with C#生成验证码的过程
ASP.NET with C#生成验证码的过程 生成验证码的大概过程就是在后台取得一个随机的字符串,然后该随机字符串绘制成一幅图片,当然,图片可以加上噪声,防止基本上不会出现的N人分析图形数据获取和还原字符串。
801 0
ASP.NET自定义控件组件开发 第一章 第三篇
原文:ASP.NET自定义控件组件开发 第一章 第三篇                                             第三篇:第一章的完结篇     系列文章链接: ASP.
889 0
ASP.NET自定义控件组件开发 第一章 第二篇 接着待续
原文:ASP.NET自定义控件组件开发 第一章 第二篇 接着待续      ASP.NET自定义控件组件开发 第一章 第二篇 接着待续     很感谢大家给我的第一篇ASP.NET控件开发的支持!在写这些之前,我也看了一些例子,想选中一些好上手的例子,这样,可能一些例子大家以前都见过,但是我想说:同样是弹钢琴,同样一首“命运交响曲”,有的人弹的让人荡气回肠,有的人弹的就很一般。
922 0
[转]性能比较:.NET Remoting 与 ASP.NET Web 服务
http://www.cnblogs.com/cheatlove/articles/385119.html 摘要:本文对 Microsoft ASP.NET Web 服务与 Microsoft .NET Remoting 的相对性能进行比较。
1162 0
一起谈.NET技术,asp.net控件开发基础(10)
  集合属性相信大家都很熟悉也很常用,如DropDownList,ListBox等控件             测试1            测试2            测试3           1.实现集合属性效果   经过前面几篇的学习,相信这一篇看起来已经相对简单了.我们要做的就是,先定义一个复杂属性,然后用迭代语句获取数组数据即可。
772 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载