asp.net 验证码的简单制作(vb.net+C#)

一、 关于验证码
验证码是因为防止机器恶意注册而被广泛应用的技术。下面是使用ASP.NET在VB.NET和C#中实现的样例代码。

二、步骤

  1. 添加ASP.NET Web页面

    • 首先,添加一个新的ASP.NET页面,指定网址,如“~/CheckCode.aspx” ,最好确保您设置为不得缓存页面。这个页面将会生成验证码的图片并直接输出。
  2. 创建验证码

    • 使用Bitmap类处理验证码图片,使用Graphics类在Bitmap对象中创建图像。
  3. 增加允许字符

    • 在生成验证码图片之前,您需要预定义一个包含所有允许字符的字符串常量,例如:“ABCDEFGHJKLMNPQRSTUVWXYZ23456789”。
    • 注意:不包含“I”和“O”字符,因为它们容易与数字1和0混淆。
  4. 添加干扰线

    • 这样可以使图片更复杂、更难以被机器识别。
    • 使用坐标随机数生成代码,在Bitmap对象中创建干扰线。
  5. 添加点位置

    • 往往需要将干扰点加入图片中。
  6. 创建一个随机字符

    • 每次生成验证码,都需要使用一个随机字符,调用Random.Next()方法获取不重复的随机数。
  7. 清除其他信息

    • 在输出图像之前,您需要清除其他信息。
  8. 输出验证码图片

    • 最后,使用Response.OutputStream将您的验证码图像输出到客户端。

三、VB.NET示例代码

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    Dim strCodes As String = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789" ' 验证码可能包含的字符
    Dim strFont As String = "Verdana" ' 字体
    Dim intWidth As Integer = 90 ' 图片宽度
    Dim intHeight As Integer = 20 ' 图片高度
    Dim intFontSize As Integer = 17 ' 字体大小
    Dim intMaxLength As Integer = 4 ' 验证码长度 '
    Dim strRandomCode As String = String.Empty 
    Dim rnd As New Random() ' 随机生成器 

    Dim img As New Bitmap(intWidth, intHeight)
    Dim g As Graphics = Graphics.FromImage(img)
    Dim font As New Font(strFont, intFontSize, FontStyle.Bold)

    ' 填充背景
    g.Clear(Color.White)

    ' 排列验证码中的字符
    For i As Integer = 0 To intMaxLength - 1
        Dim strCurrChar As String = strCodes.Substring(rnd.Next(0, strCodes.Length - 1), 1)
        strRandomCode = String.Concat(strRandomCode, strCurrChar)
        Dim x As Integer = i * (intWidth \ intMaxLength)
        Dim rndX As Integer = x + rnd.Next((intWidth \ intMaxLength) \ 2, (intWidth \ intMaxLength) - 10)
        Dim rndY As Integer = rnd.Next(5, intHeight - intFontSize - 5)
        ' 在绘画画布上输出字符
        g.DrawString(strCurrChar, font, New SolidBrush(Color.Black), rndX, rndY, New StringFormat())
    Next

    '添加干扰线
    For i As Integer = 0 To 4
        Dim x1 As Integer = rnd.Next(intWidth)
        Dim x2 As Integer = rnd.Next(intWidth)
        Dim y1 As Integer = rnd.Next(intHeight)
        Dim y2 As Integer = rnd.Next(intHeight)
        g.DrawLine(New Pen(Color.Black), x1, y1, x2, y2)
    Next

    ' 添加干扰点位
    For i As Integer = 0 To 50
        Dim x As Integer = rnd.Next(intWidth)
        Dim y As Integer = rnd.Next(intHeight)
        img.SetPixel(x, y, Color.FromArgb(rnd.Next()))
    Next

    ' 输出图片
    Response.Cache.SetCacheability(HttpCacheability.NoCache)
    Response.ContentType = "image/jpeg"
    Dim ms As New MemoryStream()
    img.Save(ms, ImageFormat.Jpeg)
    Response.BinaryWrite(ms.ToArray())
    g.Dispose()
    img.Dispose()
End Sub

四、C#示例代码


protected void Page_Load(object sender, EventArgs e)
{
    string strCodes = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789";
    string strFont = "Verdana";
    int intWidth = 90;
    int intHeight = 20;
    int intFontSize = 17;
    int intMaxLength = 4;
    string strRandomCode = String.Empty;
    Random rnd = new Random();

    Bitmap img = new Bitmap(intWidth, intHeight);
    Graphics gdi = Graphics.FromImage(img);
    Font font = new Font(strFont, intFontSize, FontStyle.Bold);

    //填充背景
    gdi.Clear(Color.White);

    //绘画验证码字符
    for (int i = 0; i < intMaxLength; i++)
    {
        string strCurrChar = strCodes.Substring(rnd.Next(0, strCodes.Length - 1), 1);
        strRandomCode = String.Concat(strRandomCode, strCurrChar);
        int x = i * (intWidth / intMaxLength);
        int rndX = x + rnd.Next((intWidth / intMaxLength) / 2, (intWidth / intMaxLength) - 10);
        int rndY = rnd.Next(5, intHeight - intFontSize - 5);
        // 在绘画画布上输出字符
        gdi.DrawString(strCurrChar, font, new SolidBrush(Color.Black), rndX, rndY, new StringFormat());
    }

    //添加随机干扰线
    for (int i = 0; i < 4; i++)
    {
        int x1 = rnd.Next(intWidth);
        int x2 = rnd.Next(intWidth);
        int y1 = rnd.Next(intHeight);
        int y2 = rnd.Next(intHeight);
        gdi.DrawLine(new Pen(Color.Black), x1, y1, x2, y2);
    }

    // 添加随机干扰点
    for (int i = 0; i < 50; i++)
    {
        int x = rnd.Next(intWidth);
        int y = rnd.Next(intHeight);
        img.SetPixel(x, y, Color.FromArgb(rnd.Next()));
    }

    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.ContentType = "image/jpeg";
    MemoryStream ms = new MemoryStream();
    img.Save(ms, ImageFormat.Jpeg);
    Response.BinaryWrite(ms.ToArray());
    gdi.Dispose();
    img.Dispose();
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:asp.net 验证码的简单制作(vb.net+C#) - Python技术站

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

相关文章

  • C# File.Copy(string sourceFileName, string destFileName):复制指定文件

    File.Copy(string sourceFileName, string destFileName)方法是C#中的一个文件操作方法,其主要作用是将一个已存在的文件复制到一个新的文件中。该方法的语法如下: public static void Copy(string sourceFileName, string destFileName); 该方法有两个…

    C# 2023年4月19日
    00
  • C#编程总结(六)详解异步编程

    C#编程总结(六)详解异步编程是一篇介绍异步编程知识的教程。异步编程是C#中非常重要的概念,它可以提高应用程序的响应速度和性能。本文将详细讲解异步编程的几个主要方面。 1. 异步编程的概念和作用 异步编程是一种优化并发应用程序的方法。在C#中,异步编程可以用async和await关键字来实现。异步编程的主要作用在于减少线程的阻塞时间,提高应用程序的响应速度和…

    C# 2023年5月15日
    00
  • ASP.NET Mvc开发之EF延迟加载

    ASP.NET Mvc是一个广泛应用于Web应用程序开发的框架,其通过使用模型-视图-控制器(MVC)设计模式来促进代码的组织、维护和测试。而在ASP.NET Mvc应用程序的开发中,数据库访问和数据操作是非常重要的一部分,其中基于Entity Framework(EF)的数据操作是最常用的方式之一。 本攻略将详细讲解在ASP.NET Mvc开发中使用EF延…

    C# 2023年5月31日
    00
  • ASP.NET(C#)中操作SQLite数据库实例

    下面我将为您详细讲解ASP.NET(C#)中操作SQLite数据库的完整攻略,以及两条示例说明。 一、介绍 SQLite是轻型关系型数据库管理系统,由C语言编写而成,并支持多种编程语言。SQLite由于其小巧、快速、高效、简单易用等优点,在移动应用开发、嵌入式系统开发等领域得到了广泛应用。 ASP.NET(C#)是一种基于.NET Framework的Web…

    C# 2023年6月1日
    00
  • CodeBuilder 3 预览版发布

    CodeBuilder是一款强大的代码生成工具,目前发布了 3.0 preview 2,大家可以前去下载体验 官方主页。 1、多种数据源 基于 ADO.NET 的数据驱动 基于 Fireasy 3,支持从 SqlServer、MySql、Oracle、Firebird、PostgreSql、SQLite、达梦、人大金仓、神通数据库,以及 OleDb 驱动。可…

    C# 2023年4月27日
    00
  • ASP.net(c#)生成条形码 code39条码生成方法

    下面是“ASP.net(c#)生成条形码 code39条码生成方法”的完整攻略。 什么是Code39条形码 Code39是一种常用的线性条形码,由数字、字母、还有一些特殊字符组成。Code39条形码可以表示0到9的数字、26个大写字母、7个特殊字符和一个空格符号。 生成Code39条形码的步骤 ASP.NET生成Code39条形码的步骤大致如下: 安装Cod…

    C# 2023年5月31日
    00
  • C# String.Contains()方法: 返回一个值,该值指示指定的字符串是否出现在此字符串中

    C#中的 String.Contains() 方法 String.Contains() 方法用于判断字符串是否包含指定的字符或子字符串,返回值为布尔类型,即如果包含则返回 true,否则返回 false。以下是该方法的语法: public bool Contains (string value); 其中,value 参数为需查找的字符串。 使用方法 使用该方…

    C# 2023年4月19日
    00
  • C#中的multipart/form-data提交文件和参数

    下面是一份详细讲解C#中使用multipart/form-data格式提交文件和参数的攻略。 什么是multipart/form-data格式 multipart/form-data是一种编码格式,用于将数据和文件上传到服务器。以表单的形式提交数据时,包含了文本类型的参数和文件类型的参数。其中,文本类型的参数通过键值对的方式提交,而文件类型的参数需要以二进制…

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