ASP.net 生成验证码

这篇博客介绍了如何在ASP.NET环境中创建一个验证码图片生成页面以及在登录页面中应用验证码。代码详细展示了生成随机验证码字符串、绘制噪线和噪点、保存验证码到SESSION以及更新验证码图片的方法。此外,还展示了登录页面的HTML结构和JavaScript代码,确保每次点击验证码图片时能够刷新验证码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.说明

此文是小白在学习张晨光老师的视频教学<<Asp.Net WEB服务器编程技术>>中做的学习笔记,一些知识点也是跟着教程走的,大家也可以去老师的主页去学习,谢谢大家.

二.生成验证码图片(checkcode.aspx.cs)

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace MyMusci
{
	public partial class checkcode : System.Web.UI.Page
	{
	    protected void Page_Load(object sender, EventArgs e)
	    {
	        string chkCode = string.Empty;
	        int ix, iy;
	        ix = 80;
	        iy = 24;
	        //颜色列表,用于验证码、噪线、噪点  
	        Color[] color = { Color.Black, Color.Red, Color.Blue, Color.Green, Color.Orange, Color.Brown, Color.Brown, Color.DarkBlue };
	        //字体列表,用于验证码  
	        string[] font = { "Times New Roman", "MS Mincho", "Book Antiqua", "Gungsuh", "MingLiU", "Arial" };
	        //验证码的字符集,去掉了一些容易混淆的字符  
	        char[] character = { '2', '3', '4', '5', '6', '8', '9','0','1','一','小','白' };
	        Random rnd = new Random();
	        //生成验证码字符串  
	        for (int i = 0; i < 4; i++)
	        {
	            chkCode += character[rnd.Next(character.Length)];
	        }
	        Bitmap bmp = new Bitmap(ix, iy);
	        Graphics g = Graphics.FromImage(bmp);
	        g.Clear(Color.White);
	        //画噪线  
	        for (int i = 0; i < 10; i++)
	        {
	            int x1 = rnd.Next(ix);
	            int y1 = rnd.Next(iy);
	            int x2 = rnd.Next(ix);
	            int y2 = rnd.Next(iy);
	            Color clr = color[rnd.Next(color.Length)];
	            g.DrawLine(new Pen(clr), x1, y1, x2, y2);
	        }
	        //画验证码字符串  
	        for (int i = 0; i < chkCode.Length; i++)
	        {
	            string fnt = font[rnd.Next(font.Length)];
	            Font ft = new Font(fnt, 14, FontStyle.Bold);
	            Color clr = color[rnd.Next(color.Length)];
	            g.DrawString(chkCode[i].ToString(), ft, new SolidBrush(clr), (float)i * 16 + 2, (float)2);
	        }
	        //画噪点  
	        for (int i = 0; i < 50; i++)
	        {
	            int x = rnd.Next(bmp.Width);
	            int y = rnd.Next(bmp.Height);
	            Color clr = color[rnd.Next(color.Length)];
	            bmp.SetPixel(x, y, clr);
	        }
	        //将验证码写入SESSION,为什么第二个页面没法获取值???
	        //一般处理程序增加接口文件;
	        Session["Code"] = chkCode.ToUpper();
	        //清除该页输出缓存,设置该页无缓存  
	        Response.Buffer = true;
	        Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0);
	        Response.Expires = 0;
	        Response.CacheControl = "no-cache";
	        Response.AppendHeader("Pragma", "No-Cache");
	        //将验证码图片写入内存流,并将其以 "image/Png" 格式输出  
	        //我这个页面返回的是图片;
	        MemoryStream ms = new MemoryStream();
	        try
	        {
	            bmp.Save(ms, ImageFormat.Png);
	            Response.ClearContent();
	            Response.ContentType = "image/Png";
	            Response.BinaryWrite(ms.ToArray());
	        }
	        finally
	        {
	            //显式释放资源  
	            bmp.Dispose();
	            g.Dispose();
	        }
	
	    }
	}
}	

三.登录页面添加验证码(login_new.aspx)

在table中添加如下代码

<tr>
    <td>
        验证码</td>
    <td>
        <asp:TextBox ID="code" runat="server"></asp:TextBox>
    </td>
    <td><img id="imgcode" src="checkcode.aspx" /></td>
</tr>
<tr>
    <td>
        <asp:Button ID="btn_sub" runat="server" class="btn btn-primary" OnClick="btn_sub_Click" Text="登录" />
    </td>
    <td>
    	<%--此处将重置按钮替换为注册(LinkButton)控件
    	PostBackUrl 表示控件点击后跳转的位置
    	CausesValidation="False" 表示不用通过验证控件便可以跳转位置
    	--%>
        <asp:LinkButton ID="LinkButton1" runat="server" class="btn btn-secondary"  PostBackUrl="~/RegUser.aspx" CausesValidation="False">注册</asp:LinkButton>
    </td>
    <td>&nbsp;</td>
</tr>

加入jquery.js,并添加如下脚本:

<script>
    //图片点击事件
    $("#imgcode").click(function () {
        $("#imgcode").attr("src", "checkcode.aspx?t=" + Math.random());
    })
</script>

当我们每次点击图片时,会刷新图片的内容,也就时验证码的内容:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值