asp.net 简单验证码验证实现代码

下面是 “asp.net 简单验证码验证实现代码”的完整攻略:

标题

1. 引入命名空间

使用验证码,需要在代码中引入System.Drawing和System.Drawing.Imaging两个命名空间。在aspx页面的头部引入这两个命名空间即可。

<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Drawing.Imaging" %>

2. 编写验证码生成函数

public void CreateCheckCodeImage(int codeCount, int width, int height, Stream outputStream)
{
    int fontSize = Math.Min(width / (codeCount + 1), height - 5); // 计算字体大小
    Bitmap bmp = new Bitmap(width, height); // 创建画布

    Graphics g = Graphics.FromImage(bmp); // 创建画布上下文
    g.Clear(Color.White); // 填充画布背景色
    g.SmoothingMode = SmoothingMode.HighQuality; // 设置抗锯齿

    Random random = new Random(); // 创建随机数生成器

    //生成干扰线条
    for (int i = 0; i < 10; i++)
    {
        int x1 = random.Next(width);
        int y1 = random.Next(height);
        int x2 = random.Next(width);
        int y2 = random.Next(height);
        g.DrawLine(new Pen(Color.LightGray, 1), x1, y1, x2, y2);
    }

    string checkCode = string.Empty; // 保存验证码字符串

    // 依次绘制每个字符
    for (int i = 0; i < codeCount; i++)
    {
        // 生成一个随机数字或字母
        int num = random.Next(36);
        char code;
        if (num < 10)
        {
            code = (char)('0' + num);
        }
        else
        {
            code = (char)('A' + num - 10);
        }
        checkCode += code.ToString(); //保存验证码字符

        //随机生成字符的加粗、倾斜以及旋转角度等效果
        float skewX = random.Next(0, 60) / 10f - 3f;
        float skewY = random.Next(0, 40) / 10f - 2f;
        float angle = random.Next(-10, 10);
        // 计算字符绘制位置
        PointF point = new PointF(fontSize * (i + 1) + random.Next(-2, 2), height / 2 + random.Next(-5, 5));
        // 设置字符颜色
        Color color = Color.FromArgb(random.Next(0, 256), random.Next(0, 256), random.Next(0, 256));
        using (Font font = new Font(FontFamily.GenericSerif, fontSize, FontStyle.Bold))
        using (Matrix mat = new Matrix(1, 0, 0, 1, 0, 0))
        {
            mat.Shear(skewX, skewY); //  设置剪切
            mat.Rotate(angle); //  设置旋转角度
            g.Transform = mat; // 应用变换矩阵
            g.DrawString(code.ToString(), font, new SolidBrush(color), point); // 绘制字符
            g.ResetTransform(); // 恢复矩阵
        }
    }

    bmp.Save(outputStream, ImageFormat.Jpeg); // 输出图像
    context.Session["CheckCode"] = checkCode; // 将验证码字符串保存到会话中
    g.Dispose(); // 释放资源
    bmp.Dispose();
}

3. 在页面上使用

在需要验证码的页面创建一个“image”标签,在后台动态生成验证码并输出到该标签,同时将验证码字符串保存到会话中。

<asp:Image ID="imgCheckCode" runat="server" />
protected void Page_Load(object sender, EventArgs e)
{
    MemoryStream ms = new MemoryStream(); //创建内存流
    CreateCheckCodeImage(4, 100, 50, ms); //生成验证码
    byte[] buffer = ms.ToArray(); //从内存流中获取字节数组
    Response.ClearContent(); // 清空输出流
    Response.ContentType = "image/Jpeg"; //设置输出类型
    Response.BinaryWrite(buffer); //输出图像
    Response.End(); //停止输出
}

4. 验证用户输入

将用户输入的验证码字符串和之前保存在会话中的验证码字符串进行比较即可。

string checkCode = Session["CheckCode"].ToString(); //获取会话中保存的验证码字符串
if (!string.Equals(txtCheckCode.Text.Trim(), checkCode, StringComparison.InvariantCultureIgnoreCase))
{
    //验证码错误
}
else
{
    //验证码正确
}

示例说明

示例一

在登录页面中添加验证码,实现防止恶意攻击的效果。

<asp:TextBox ID="txtName" runat="server" />
<asp:TextBox ID="txtPassword" runat="server" TextMode="Password" />
<asp:TextBox ID="txtCheckCode" runat="server" />
<asp:Image ID="imgCheckCode" runat="server" />
<asp:Button ID="btnLogin" runat="server" Text="登录" OnClick="btnLogin_Click" />

在后台页面中生成验证码,并将验证码字符串和用户输入进行比较验证:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        MemoryStream ms = new MemoryStream(); //创建内存流
        CreateCheckCodeImage(4, 100, 50, ms); //生成验证码
        byte[] buffer = ms.ToArray(); //从内存流中获取字节数组
        imgCheckCode.ImageUrl = "data:image/Jpeg;base64," + Convert.ToBase64String(buffer); //输出图像
        Session["CheckCode"] = checkCode; // 将验证码字符串保存到会话中
    }
}

protected void btnLogin_Click(object sender, EventArgs e)
{
    string checkCode = Session["CheckCode"].ToString(); //获取会话中保存的验证码字符串
    if (!string.Equals(txtCheckCode.Text.Trim(), checkCode, StringComparison.InvariantCultureIgnoreCase))
    {
        //验证码错误
        Response.Write("验证码错误");
    }
    else
    {
        //验证码正确,进行登录操作
        //...
    }
}

示例二

创建一个注册页面,在其中添加验证码,并将验证码的结果保存到数据库中。

<asp:TextBox ID="txtName" runat="server" />
<asp:TextBox ID="txtPassword" runat="server" TextMode="Password" />
<asp:TextBox ID="txtCheckCode" runat="server" />
<asp:Image ID="imgCheckCode" runat="server" />
<asp:Button ID="btnRegister" runat="server" Text="注册" OnClick="btnRegister_Click" />

在后台页面中生成验证码,并将验证码字符串和用户输入进行比较验证,如果验证通过,则将用户名、密码和验证码字符串保存到数据库中。

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        MemoryStream ms = new MemoryStream(); //创建内存流
        CreateCheckCodeImage(4, 100, 50, ms); //生成验证码
        byte[] buffer = ms.ToArray(); //从内存流中获取字节数组
        imgCheckCode.ImageUrl = "data:image/Jpeg;base64," + Convert.ToBase64String(buffer); //输出图像
        Session["CheckCode"] = checkCode; // 将验证码字符串保存到会话中
    }
}

protected void btnRegister_Click(object sender, EventArgs e)
{
    string checkCode = Session["CheckCode"].ToString(); //获取会话中保存的验证码字符串
    if (!string.Equals(txtCheckCode.Text.Trim(), checkCode, StringComparison.InvariantCultureIgnoreCase))
    {
        //验证码错误
        Response.Write("验证码错误");
    }
    else
    {
        //验证码正确,将用户输入保存到数据库中
        string name = txtName.Text.Trim();
        string password = txtPassword.Text.Trim();
        //保存到数据库中
        //...
        Response.Write("注册成功");
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:asp.net 简单验证码验证实现代码 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • C#中的Linq To XML讲解

    Linq To XML是C#中的一个强大的XML数据处理方式,可以轻松地查询、修改、创建和导出XML文档。下面将详细讲解Linq To XML的使用方法。 1. Linq To XML的基础 1.1 创建XML文档 要使用Linq To XML处理XML文档,首先需要创建一个XDocument对象,这个对象代表一个XML文档。可以通过以下代码创建一个简单的X…

    C# 2023年6月1日
    00
  • 如何在C# 中使用 FFmpeg.NET

    使用 FFmpeg.NET 可以方便地在 C# 项目中进行音视频处理。以下是使用 FFmpeg.NET 的完整攻略。 环境搭建 下载并安装 FFmpeg 库。可以从 https://www.ffmpeg.org/download.html 下载对应平台的二进制版本。例如,Windows 平台可以下载 Windows 版本的 FFmpeg。 在 C# 项目中添…

    C# 2023年6月1日
    00
  • 前端构建 Less入门(CSS预处理器)

    前端构建 Less入门(CSS预处理器) CSS预处理器是一种把CSS编写过程中所需要的变量、混合(类似于函数)、继承等操作实现的一种技术。当我们大规模开发Web前端项目时,使用CSS预处理器可以提高CSS代码的复用性和可维护性。 Less是一种广泛使用的CSS预处理器,本文将介绍Less的基本使用方法和常用功能。 安装Less 在使用Less之前,需要首先…

    C# 2023年6月6日
    00
  • C#微信开发之发送模板消息

    C#微信开发之发送模板消息完整攻略 概述 微信模板消息是一种微信提供的消息推送方式,可以让开发者向用户主动发送重要信息,如订单状态变更、交易成功、活动通知等。本文将介绍如何在C#中使用微信公众号(WeChat Official Account)的API发送模板消息,包括准备工作、代码实现和注意事项。 准备工作 获得微信公众号的appid和appsecret,…

    C# 2023年6月1日
    00
  • C#编程实现QQ界面的方法

    C#编程实现QQ界面的方法 前言 QQ是中国最流行的即时通讯软件之一,它的界面十分经典,因此,很多初学编程的人都想尝试使用C#编写一个类似QQ的界面。本文将介绍如何使用C#编写QQ界面的方法,并提供两个示例说明。 第一步:界面设计 在C#中,我们可以使用Visual Studio中的Windows Form进行界面的设计。因此,第一步就是打开Visual S…

    C# 2023年5月31日
    00
  • Netcore磊科路由器无线MAC地址过滤图解教程

    Netcore磊科路由器无线MAC地址过滤图解教程如下: 步骤一:登录路由器 首先,需要登录到 Netcore 磊科路由器的管理界面。在浏览器中输入路由器的 IP 地址,然后输入用户名和密码进行登录。 步骤二:进入无线设置页面 在登录成功后,进入路由器的无线设置页面。在页面中找到“MAC地址过滤”选项,并点击进入。 步骤三:启用MAC地址过滤 在“MAC地址…

    C# 2023年5月17日
    00
  • 解析C#中#region与#if的作用

    解析C#中#region与#if的作用 在C#中,#region和#if是两种常见的预处理指令,用于对代码进行组织和条件编译。下面我们将从两个方面对它们进行详细讲解。 #region指令 #region指令用于将代码块标记为一个逻辑区域。它的作用有以下三个方面: 组织代码:使用#region将相关的代码块放在一起,能够更好的组织代码,使代码的结构更加清晰。 …

    C# 2023年6月8日
    00
  • jquery+ajax+C#实现无刷新操作数据库数据的简单实例

    下面我将为你详细讲解“jquery+ajax+C#实现无刷新操作数据库数据的简单实例”的完整攻略。 1. 准备工作 在开始前,你需要先准备好以下工作: 一台装有IIS、SQL Server等环境的Windows服务器。 一份C#项目,其中包含与数据库交互的代码。 一个HTML页面,用于调用Ajax和展示数据。 2. 实现步骤 2.1 配置Web.config…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部