asp.net验证码生成和刷新及验证

本文介绍了一种基于ASP.NET的网页验证码实现方法,包括随机码生成、图片绘制及验证过程,并提供了完整的代码示例。
 验证码技术是为了防止暴力破解等而设定的。现在一般的网站注册等都提供验证码功能,特别是腾讯更是长长的一串。文中参考了http://www.cnblogs.com/netflu/archive/2007/01/10/242038.html的代码。有了就没有必要再写了。可以读一下。不过我测试时发现了两次PageLoad的问题。注释了两句即可。同时修改了namespaces。同时提供完整的验证说明:
1 新建VerifyCode.aspx
cs文件代码如下:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Text;

///<summary>
/// 页面验证码程序
/// 使用:在页面中加入HTML代码 <img src="VerifyCode.aspx">
/// </summary>

public partial class VerifyCode : System.Web.UI.Page
{


    
static string[] FontItems  = new string[] {   "Arial"
                                                  
"Helvetica"
                                                  
"Geneva"
                                                  
"sans-serif"
                                                  
"Verdana"
                                              }
;

    
static Brush[] BrushItems = new Brush[] {     Brushes.OliveDrab,
                                                  Brushes.ForestGreen,
                                                  Brushes.DarkCyan,
                                                  Brushes.LightSlateGray,
                                                  Brushes.RoyalBlue,
                                                  Brushes.SlateBlue,
                                                  Brushes.DarkViolet,
                                                  Brushes.MediumVioletRed,
                                                  Brushes.IndianRed,
                                                  Brushes.Firebrick,
                                                  Brushes.Chocolate,
                                                  Brushes.Peru,
                                                  Brushes.Goldenrod
                                            }
;

    
static string[] BrushName = new string[] {    "OliveDrab",
                                                  
"ForestGreen",
                                                  
"DarkCyan",
                                                  
"LightSlateGray",
                                                  
"RoyalBlue",
                                                  
"SlateBlue",
                                                  
"DarkViolet",
                                                  
"MediumVioletRed",
                                                  
"IndianRed",
                                                  
"Firebrick",
                                                  
"Chocolate",
                                                  
"Peru",
                                                  
"Goldenrod"
                                             }
;

    
private static Color BackColor    =  Color.White;
    
private static Pen   BorderColor  =  Pens.DarkGray;
    
private static int   Width        =  52;
    
private static int   Height       =  21;

    
private Random _random;
    
private string _code;
    
private int    _brushNameIndex;

    
    
override protected void OnInit(EventArgs e)
    
{
        
//
        
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
        
//
        
//InitializeComponent();
        
//base.OnInit(e);
    }

    
    
/**//// <summary>
    
/// Required method for Designer support - do not modify
    
/// the contents of this method with the code editor.
    
/// </summary>

    private void InitializeComponent()
    
{    
        
//this.Load += new System.EventHandler(this.Page_Load);
    }




    
/// <summary>
    
/// 
    
/// </summary>
    
/// <param name="sender"></param>
    
/// <param name="e"></param>

    public void Page_Load(object sender, System.EventArgs e)
    
{
        
if (!IsPostBack)
        
{
            
//
            
// TODO : initialize
            
//
            this._random = new Random();
            
this._code = GetRandomCode();

            
//
            
// TODO : use Session["code"] save the VerifyCode
            
//
            Session["code"= this._code;

            
//
            
// TODO : output Image
            
//
            this.SetPageNoCache();
            
this.OnPaint();
        }

    }





    
/**//// <summary>
    
/// 设置页面不被缓存
    
/// </summary>

    private void SetPageNoCache()
    
{
        Response.Buffer 
= true;
        Response.ExpiresAbsolute 
= System.DateTime.Now.AddSeconds(-1);
        Response.Expires 
= 0;
        Response.CacheControl 
= "no-cache";
        Response.AppendHeader(
"Pragma","No-Cache");
    }


    
/**//// <summary>
    
/// 取得一个 4 位的随机码
    
/// </summary>
    
/// <returns></returns>

    private string GetRandomCode()
    
{
        
return Guid.NewGuid().ToString().Substring(04);
    }


    
/**//// <summary>
    
/// 随机取一个字体
    
/// </summary>
    
/// <returns></returns>

    private Font GetFont()
    
{
        
int fontIndex = _random.Next(0, FontItems.Length);
        FontStyle fontStyle 
= GetFontStyle(_random.Next(02));
        
return new Font(FontItems[fontIndex], 12, fontStyle);
    }


    
/**//// <summary>
    
/// 取一个字体的样式
    
/// </summary>
    
/// <param name="index"></param>
    
/// <returns></returns>

    private FontStyle GetFontStyle(int index)
    
{
        
switch (index)
        
{
            
case 0:
                
return FontStyle.Bold;
            
case 1:
                
return FontStyle.Italic;
            
default:
                
return FontStyle.Regular;
        }

    }


    
/**//// <summary>
    
/// 随机取一个笔刷
    
/// </summary>
    
/// <returns></returns>

    private Brush GetBrush()
    
{
        
int brushIndex = _random.Next(0, BrushItems.Length);
        _brushNameIndex 
= brushIndex;
        
return BrushItems[brushIndex];
    }




    
/**//// <summary>
    
/// 绘画事件
    
/// </summary>

    private void OnPaint()
    
{
        Bitmap objBitmap 
= null;
        Graphics g 
= null;

        
try
        
{
            objBitmap 
= new Bitmap(Width, Height);
            g 
= Graphics.FromImage(objBitmap);

            Paint_Background(g);
            Paint_Text(g);
            Paint_TextStain(objBitmap);
            Paint_Border(g);

            objBitmap.Save(Response.OutputStream, ImageFormat.Gif);
            Response.ContentType 
= "image/gif";
        }

        
catch {}
        
finally
        
{
            
if (null != objBitmap)
                objBitmap.Dispose();
            
if (null != g)
                g.Dispose();
        }

    }


    
/**//// <summary>
    
/// 绘画背景颜色
    
/// </summary>
    
/// <param name="g"></param>

    private void Paint_Background(Graphics g)
    
{
        g.Clear(BackColor);
    }


    
/**//// <summary>
    
/// 绘画边框
    
/// </summary>
    
/// <param name="g"></param>

    private void Paint_Border(Graphics g)
    
{
        g.DrawRectangle(BorderColor, 
00, Width - 1, Height - 1);
    }


    
/**//// <summary>
    
/// 绘画文字
    
/// </summary>
    
/// <param name="g"></param>

    private void Paint_Text(Graphics g)
    
{
        g.DrawString(_code, GetFont(), GetBrush(), 
31);
    }


    
/**//// <summary>
    
/// 绘画文字噪音点
    
/// </summary>
    
/// <param name="g"></param>

    private void Paint_TextStain(Bitmap b)
    
{
        
for (int n=0; n<30; n++)
        
{
            
int x = _random.Next(Width);
            
int y = _random.Next(Height);
            b.SetPixel(x, y, Color.FromName(BrushName[_brushNameIndex]));
        }


    }



}
 


 2 页面引用:

<asp:Image ID="getcode" src="VerifyCode.aspx" runat="server" />

一般需要同时提供刷新功能(看不清楚换一张),代码如下


    <asp:Image ID="getcode" src="VerifyCode.aspx" runat="server" />&nbsp;&nbsp;<A href="javascript:getimgcode()">刷新验证码</A>
 
超链接对应的javascript如下:

 <script language="javascript" type="text/javascript">
function getimgcode()
{
     var getimagecode = document.getElementById("getcode");
     getimagecode.src = "VerifyCode.aspx";
}
</script>

3 判断验证

   上述代码是将验证码存贮在Session中,用code来标志。读取代码Session["code"].ToString();
   使用中,我们只需要比较
Session["code"].ToString()文本框输入的串(TextBoxCode.Text)是否相同即可进行判断。
        if(Session["code"].ToString().Trim().Equals(TextBoxCode.Text.Trim()))
        
{

            Response.Write(
"Success");
        }

测试通过!
03-08
### MathPix工具介绍 Mathpix Snipping Tool 是一款强大的数学公式识别工具,从最初的原型发展至今已经历了多次迭代和功能增强[^1]。该工具不仅能处理简单的数学表达式,还可以应对复杂的数学模型以及多行公式,并且支持手写公式的识别。 这款应用程序通过不断的科技创新与用户反馈改进,在学术研究和技术领域赢得了良好声誉,成为许多科研人员不可或缺的工作伙伴之一。除了基本的功能外,Mathpix 还提供了多种高级特性来满足不同用户的特定需求。 ### 使用方法 #### 安装与启动 为了使用 Mathpix Snipping Tool ,首先需要下载安装程序并按照提示完成设置过程。一旦成功安装后即可随时调用此应用来进行截图操作。 #### 截取屏幕上的公式图像 当遇到想要转换成 LaTeX 或 AsciiMath 的图片时,只需打开软件界面按下快捷键(默认为 `Ctrl+Alt+M`),此时鼠标指针会变为十字形状以便于选取目标区域;框选所需部分之后松开按键即刻上传至云端服务器等待进一步分析处理。 #### 获取LaTeX代码片段 经过短暂几秒钟的时间延迟过后,所截获的内容将以纯文本形式显示出来供复制粘贴到其他编辑器当中继续编写文档或是分享给他人查看交流之用。 ```python import pyperclip # 假设已获取到LaTeX字符串 stored_in_variable named latex_code pyperclip.copy(latex_code) print("LaTeX code has been copied to clipboard.") ``` 对于希望深入探索更多可能性的用户来说,可以考虑查阅官方提供的扩展插件——如用于解析Markdown文件内的公式标记语法的库 **mathpix-markdown-it** [^2] ——这将进一步提升工作效率和个人体验感。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值