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# 使用Tcp/Udp协议的示例代码

    C#是一种面向对象的编程语言,它可以通过Tcp/Udp协议与其他网络设备进行通信。为了更好地掌握C#使用Tcp/Udp协议的示例代码,我们需要专门制定一套攻略,下面是具体的过程: 1.了解Tcp/Udp协议 在编写C#代码之前,需要先了解Tcp/Udp协议。Tcp协议是一种面向连接的协议,它提供可靠的数据传输和错误恢复机制,并保证数据的无序交付;Udp协议是…

    C# 2023年5月31日
    00
  • C#实现航班预订系统

    C#实现航班预订系统完整攻略 目录 简介 基本功能 技术栈 实现步骤 简介 航班预订系统是指通过计算机网络,提供适当的航班信息和相应的预订服务,让用户能够方便地进行航班查询和预订。在本文中,我们将使用C#语言实现一个简单的航班预订系统。 基本功能 这个航班预订系统具有以下基本功能: 用户可以以一种用户友好的方式查询航班信息。 用户可以选择要预订的航班,并进行…

    C# 2023年5月31日
    00
  • C#中的矩形数组(多维数组)和锯齿数组的实现

    关于C#中多维数组和锯齿数组的实现攻略,以下是详细的讲解。 多维数组 多维数组是一种包含多个维度的数组,形如一个表格,每行有多列,每列有多行。我们可以使用矩形数组或方形数组来表示。使用数组时,我们使用逗号来分隔不同的维度,例如int[,] array,其中[,]表示这个数组有两个维度。 矩形数组的实现 下面是一个基本的二维矩形数组的示例: int[,] ar…

    C# 2023年6月7日
    00
  • C# NetRemoting实现双向通信

    C#NetRemoting是一种在不同应用程序域之间进行远程过程调用(RPC)的技术,可以实现客户端与服务器之间的双向通信。下面是C#NetRemoting实现双向通信的完整攻略: 步骤一:创建接口 第一步是创建一个接口,定义双向通信的方法和事件,例如: public interface IRemoteObject { // 定义客户端向服务器发送消息的方法…

    C# 2023年5月14日
    00
  • C#中实现一次执行多条带GO的sql语句实例

    要在C#中实现一次执行多条带GO的SQL语句,通常有以下两种方法: 将一次执行多条带GO的SQL语句拆分成多个SQL语句进行执行。 在C#中,可以使用SqlConnection、SqlCommand等类库来连接并操作SQL Server数据库。针对上述需求,可以通过以下代码将多条带GO的SQL语句分割开: string sql = @" SELEC…

    C# 2023年6月1日
    00
  • WPF创建Prism应用程序

    WPF 创建 Prism 应用程序的完整攻略 Prism 是一个用于构建 XAML 应用程序的开源框架,它提供了一组工具和库,帮助开发人员构建可扩展、可重用和易于维护的应用程序。本攻略将介绍如何使用 Prism 创建 WPF 应用程序,并提供两个示例说明。 步骤 步骤1:创建 WPF 应用程序 首先,我们需要创建一个 WPF 应用程序。可以使用 Visual…

    C# 2023年5月17日
    00
  • asp.net输出重写压缩页面文件实例代码

    ASP.NET是一款常用的Web应用程序开发框架,提供了很多优秀的功能。其中,输出重写和压缩页面文件也是ASP.NET的一个很重要的功能。下面,我将向大家详细讲解“asp.net输出重写压缩页面文件实例代码”的完整攻略。 一、什么是输出重写 ASP.NET中,输出重写是一种技术,可以动态地修改应用程序输出的HTML代码。当ASP.NET处理应用程序时,会生成…

    C# 2023年5月31日
    00
  • C#实现简单屏幕监控的方法

    当我们需要监控并获取系统正在运行的一些信息时,屏幕监控便是一种非常有效的手段。在C#语言中,我们可以通过System.Windows.Forms这个库来实现简单的屏幕监控。 获取屏幕上的图像数据 第一步是获取屏幕上的图像数据。我们可以使用Screen类来获取当前屏幕的宽、高等参数,然后通过Graphics类的CopyFromScreen方法将屏幕上的图像数据…

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