`

c# 验证码生成与使用

 
阅读更多

---生成验证码的类

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
using System.Web;

namespace Maticsoft.Common
{
    public class ValidateCode
    {

        public ValidateCode()
        {
        }
        /// <summary>
        /// 验证码的最大长度
        /// </summary>
        public int MaxLength
        {
            get { return 10; }
        }
        /// <summary>
        /// 验证码的最小长度
        /// </summary>
        public int MinLength
        {
            get { return 1; }
        }
        /// <summary>
        /// 生成验证码
        /// </summary>
        /// <param name="length">指定验证码的长度</param>
        /// <returns></returns>
        public string CreateValidateCode(int length)
        {
            int[] randMembers = new int[length];
            int[] validateNums = new int[length];
            string validateNumberStr = "";
            //生成起始序列值
            int seekSeek = unchecked((int)DateTime.Now.Ticks);
            Random seekRand = new Random(seekSeek);
            int beginSeek = (int)seekRand.Next(0, Int32.MaxValue - length * 10000);
            int[] seeks = new int[length];
            for (int i = 0; i < length; i++)
            {
                beginSeek += 10000;
                seeks[i] = beginSeek;
            }
            //生成随机数字
            for (int i = 0; i < length; i++)
            {
                Random rand = new Random(seeks[i]);
                int pownum = 1 * (int)Math.Pow(10, length);
                randMembers[i] = rand.Next(pownum, Int32.MaxValue);
            }
            //抽取随机数字
            for (int i = 0; i < length; i++)
            {
                string numStr = randMembers[i].ToString();
                int numLength = numStr.Length;
                Random rand = new Random();
                int numPosition = rand.Next(0, numLength - 1);
                validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1));
            }
            //生成验证码
            for (int i = 0; i < length; i++)
            {
                validateNumberStr += validateNums[i].ToString();
            }
            return validateNumberStr;
        }
        /// <summary>
        /// 创建验证码的图片
        /// </summary>
        /// <param name="containsPage">要输出到的page对象</param>
        /// <param name="validateNum">验证码</param>
        public void CreateValidateGraphic(string validateCode, HttpContext context)
        {
            Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);
            Graphics g = Graphics.FromImage(image);
            try
            {
                //生成随机生成器
                Random random = new Random();
                //清空图片背景色
                g.Clear(Color.White);
                //画图片的干扰线
                for (int i = 0; i < 25; i++)
                {
                    int x1 = random.Next(image.Width);
                    int x2 = random.Next(image.Width);
                    int y1 = random.Next(image.Height);
                    int y2 = random.Next(image.Height);
                    g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
                }
                Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));
                LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
                 Color.Blue, Color.DarkRed, 1.2f, true);
                g.DrawString(validateCode, font, brush, 3, 2);
                //画图片的前景干扰点
                for (int i = 0; i < 100; i++)
                {
                    int x = random.Next(image.Width);
                    int y = random.Next(image.Height);
                    image.SetPixel(x, y, Color.FromArgb(random.Next()));
                }
                //画图片的边框线
                g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
                //保存图片数据
                MemoryStream stream = new MemoryStream();
                image.Save(stream, ImageFormat.Jpeg);
                //输出图片流
                context.Response.Clear();
                context.Response.ContentType = "image/jpeg";
                context.Response.BinaryWrite(stream.ToArray());
            }
            finally
            {
                g.Dispose();
                image.Dispose();
            }
        }
        /// <summary>
        /// 得到验证码图片的长度
        /// </summary>
        /// <param name="validateNumLength">验证码的长度</param>
        /// <returns></returns>
        public static int GetImageWidth(int validateNumLength)
        {
            return (int)(validateNumLength * 12.0);
        }
        /// <summary>
        /// 得到验证码的高度
        /// </summary>
        /// <returns></returns>
        public static double GetImageHeight()
        {
            return 22.5;
        }
    }
}

 

------handler的里使用

 public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "image/jpeg";
            //CZBK.Regular.UI.Main

            Maticsoft.Common.ValidateCode validateCode = new ValidateCode();

            var strCode = validateCode.CreateValidateCode(4);

            validateCode.CreateValidateGraphic(strCode,context);

            context.Response.End();

        }

 

-----页面的使用

  <img src="ValidateHandler.ashx" id="strImg" />

 

 

这样就好了

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    C#生成并验证验证码

    总之,C#提供了丰富的图形和字符串处理功能,使得我们可以方便地实现具有噪音线和扭曲字体的验证码生成与验证。在实际开发中,我们还可以考虑加入更多的安全措施,如限制同一IP的尝试次数,或者使用更复杂的验证码...

    C# 验证码生成与识别

    C# 验证码生成与识别 网上的算法 简单的 可以参考

    C# 自动生成验证码

    下载完直接就是一个C#的VerificationCodeHelper.cs类,类中已经写好自动生成验证码的代码功能,直接调用验证码的实体类就可以使用。

    C# 如何自动生成验证码(Web图形验证码生成示例),相信好多人有要用哦(源码)

    以下是一个简单的C#验证码生成器的伪代码示例: ```csharp public void GenerateCAPTCHA() { int width = 120; int height = 40; Random random = new Random(); int code = random.Next(10000, 99999); // ...

    c# 验证码生成 源代码

    本篇文章将深入探讨如何使用C#来实现一个混合字母和数字的验证码生成器,并加入随机线色干扰,提高其安全性。 首先,我们要理解验证码的基本组成部分。验证码通常由一串随机生成的字符(包括字母和数字)组成,这些...

    验证码控件 C#验证码控件

    7. **可扩展性**:C#验证码控件通常具有良好的可扩展性,开发者可以自定义验证码的生成逻辑,例如添加自定义字体、图案或者验证码的验证逻辑。 在实际应用中,C#验证码控件的使用方法通常包括以下几个步骤: 1. **...

    C#验证码生成程序

    以下是关于“C#验证码生成程序”的详细知识点: 1. **验证码的基本原理**:验证码通常由随机生成的一串字符组成,这些字符可以是数字、字母或者其他符号,通过扭曲、倾斜、添加噪声线等方式增强图像的复杂性,以...

    C#中文验证码

    7. **处理用户输入**:用户输入的验证码与生成的验证码字符串进行比较,如果匹配则验证通过,否则提示错误。 8. **安全考虑**:为了防止暴力破解,验证码应有使用次数限制,并且每次请求后都应更新验证码。 在实际...

    c#验证码生成器.zip

    验证码生成器 一直想写验证码识别,但苦于没有足够的训练数据。 之前数据样本都是让我同学手动帮填的,效率极低而且还有错误率,后来想起找源码不是更方便吗。 便通过反编译zjdx.dll写下了批量生成验证码的软件。 ...

    C# 验证码生成器(带模糊功能)

    在本项目中,我们关注的是...这个C#验证码生成器的实现将涵盖图像处理、随机数生成以及文本渲染等多个方面,为Web应用程序提供了一种有效的防御自动化攻击的手段。开发者可以根据实际需求调整验证码的复杂性和安全性。

    基于C#的验证码生成器

    这是一个验证码生成器,有以下功能(代码内部的注释很详细): 1 :产生一个验证码的图片(当能这个是必须的) 2 : 图片中的 重要包括3部分,字符,起干扰作用的线条,起干扰作用的小圆 3 :如下都是随机产生的 ① ...

    C#生成动态验证码

    在本主题中,我们将深入探讨如何使用C#编程语言来生成和验证动态验证码。 验证码通常由一串随机字符组成,可以是数字、字母或者两者的组合,有时还会加入一些扭曲、旋转、噪点等视觉干扰元素,以增加机器识别的难度...

    本人收集的C#登录验证码生成_有三个样式

    本资源集合包含了三个不同样式的C#验证码生成器,对于学习和理解验证码的实现原理以及C#编程实践具有很高的价值。 样式一的验证码生成器通常会涉及以下几个关键技术点: 1. **随机数生成**:验证码的每个字符通常...

    C#登录界面验证码生成

    1、开放源码文件 2、用于登录界面验证码随机生成,包括数字+字母、纯数字、纯字母3类验证码,已经调试成功,下载即用。 3、基于VS2015,C#

    c#生成图形验证码 一图片的形式生成验证码

    在C#编程语言中,我们可以创建自己的图形验证码生成器。下面我们将详细探讨如何用C#来实现这一功能。 首先,我们需要引入必要的库。在C#中,我们通常会使用System.Drawing命名空间,因为它包含了创建和操作图像所需...

    C#生成中文汉字验证码源码

    这为后续编写验证码生成逻辑提供了必要的工具。 ```csharp using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System...

    使用c#生成gif动画验证码

    C#生成Gif源码,使用c#生成gif动画验证码及给gif动画加上水印代码

    C#随机生成10以内的加减法验证码实例

    **验证码生成** 在`GenerateCheckCode`方法中,首先定义了两个随机整数`intFirst`和`intSec`,其取值范围为1到10。接下来,根据随机数决定生成加法还是减法运算: - 如果是减法,则需要确保被减数大于减数,以...

    .NET C# 页面登录验证码生成

    本项目 ".NET C# 页面登录验证码生成" 提供了一种在C# Web应用中实现验证码的方法。以下将详细讲解验证码的生成原理和在.NET C# 中的实现步骤。 1. **验证码的基本原理**: - 验证码的主要目的是区分人类和机器,...

Global site tag (gtag.js) - Google Analytics