- 浏览: 190092 次
- 性别:
- 来自: 深圳
文章分类
最新评论
---生成验证码的类
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" />
这样就好了
发表评论
文章已被作者锁定,不允许评论。
-
使用SignalR构建一个最基本的web聊天室
2015-01-06 15:09 770使用SignalR,可以使用服务器消息推送到客户端,件demo ... -
Cookie小知识
2014-12-17 11:02 600如果cookie设置了过期时间,cookie就会保存在硬盘中 ... -
远程服务器返回错误: (500) 内部服务器错误 (解决方案)
2013-12-19 18:00 14187“/”应用程序中的服务器错误。 远程服务器返回错误: ... -
C# 的异步get 的三种方法
2013-06-21 16:04 971using System;using System.Colle ... -
ado.net 连接池相关知识
2013-01-27 20:07 846using System;using System.Coll ... -
多线程的理解
2012-09-21 00:31 726什么是多线程:多线程就是“同时”可以执行多个任务,实际上并不是 ... -
委托:委托、事件与Observer设计模式
2012-09-20 23:10 949上面的例子已不足以再进行下面的讲解了,我们来看一个新的范例,因 ... -
委托:将方法绑定到委托
2012-09-20 22:59 805将方法绑定到委托 看到这里,是不是有那么点如梦初醒的感觉?于 ... -
委托:将方法做为方法的参数
2012-09-20 22:51 735引言 委托 和 事件在 .Net Framework中的应用 ... -
C#,FTP上传的代码 FtpWebRequest
2012-08-24 22:46 965private void Upload(string file ... -
c#之冒泡法与快速法排序
2012-08-08 22:10 745设计页面labe1 ,label2 ,label5分 ... -
C#中数组类型的相互转换
2012-08-08 22:11 1558string数组类型转换为int数组.方法一:Con ... -
C#中基类和派生类的构造函数以及变量的执行顺序整理
2012-04-04 22:54 1106Code highlighting produced by A ... -
时间处理类
2012-03-01 11:10 730/// <summary> /// ... -
DropDownList 小知识
2011-12-03 10:24 873给DropDownList 绑定值后,如果要默认选中其中一个 ... -
列表最后一行加小计或总计 ——小总结
2011-11-30 16:56 17751.所有分页的总计 protec ... -
无法加载协定为“tt.WeatherWebServiceSoap”的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的终结点配置部分。
2011-11-22 22:08 3832无法加载协定为“tt.WeatherWebServiceSoa ... -
一个天气预报的webservice
2011-11-21 20:45 1062http://www.webxml.com.cn/WebSer ... -
asp.net 页面生成html页面 方法二
2011-11-15 22:53 986protected override void Render ... -
asp.net 页面生成html页面 方法一
2011-11-15 22:43 870这是个方法 private bool CreateList( ...
相关推荐
总之,C#提供了丰富的图形和字符串处理功能,使得我们可以方便地实现具有噪音线和扭曲字体的验证码生成与验证。在实际开发中,我们还可以考虑加入更多的安全措施,如限制同一IP的尝试次数,或者使用更复杂的验证码...
C# 验证码生成与识别 网上的算法 简单的 可以参考
下载完直接就是一个C#的VerificationCodeHelper.cs类,类中已经写好自动生成验证码的代码功能,直接调用验证码的实体类就可以使用。
以下是一个简单的C#验证码生成器的伪代码示例: ```csharp public void GenerateCAPTCHA() { int width = 120; int height = 40; Random random = new Random(); int code = random.Next(10000, 99999); // ...
本篇文章将深入探讨如何使用C#来实现一个混合字母和数字的验证码生成器,并加入随机线色干扰,提高其安全性。 首先,我们要理解验证码的基本组成部分。验证码通常由一串随机生成的字符(包括字母和数字)组成,这些...
7. **可扩展性**:C#验证码控件通常具有良好的可扩展性,开发者可以自定义验证码的生成逻辑,例如添加自定义字体、图案或者验证码的验证逻辑。 在实际应用中,C#验证码控件的使用方法通常包括以下几个步骤: 1. **...
以下是关于“C#验证码生成程序”的详细知识点: 1. **验证码的基本原理**:验证码通常由随机生成的一串字符组成,这些字符可以是数字、字母或者其他符号,通过扭曲、倾斜、添加噪声线等方式增强图像的复杂性,以...
7. **处理用户输入**:用户输入的验证码与生成的验证码字符串进行比较,如果匹配则验证通过,否则提示错误。 8. **安全考虑**:为了防止暴力破解,验证码应有使用次数限制,并且每次请求后都应更新验证码。 在实际...
验证码生成器 一直想写验证码识别,但苦于没有足够的训练数据。 之前数据样本都是让我同学手动帮填的,效率极低而且还有错误率,后来想起找源码不是更方便吗。 便通过反编译zjdx.dll写下了批量生成验证码的软件。 ...
在本项目中,我们关注的是...这个C#验证码生成器的实现将涵盖图像处理、随机数生成以及文本渲染等多个方面,为Web应用程序提供了一种有效的防御自动化攻击的手段。开发者可以根据实际需求调整验证码的复杂性和安全性。
这是一个验证码生成器,有以下功能(代码内部的注释很详细): 1 :产生一个验证码的图片(当能这个是必须的) 2 : 图片中的 重要包括3部分,字符,起干扰作用的线条,起干扰作用的小圆 3 :如下都是随机产生的 ① ...
在本主题中,我们将深入探讨如何使用C#编程语言来生成和验证动态验证码。 验证码通常由一串随机字符组成,可以是数字、字母或者两者的组合,有时还会加入一些扭曲、旋转、噪点等视觉干扰元素,以增加机器识别的难度...
本资源集合包含了三个不同样式的C#验证码生成器,对于学习和理解验证码的实现原理以及C#编程实践具有很高的价值。 样式一的验证码生成器通常会涉及以下几个关键技术点: 1. **随机数生成**:验证码的每个字符通常...
1、开放源码文件 2、用于登录界面验证码随机生成,包括数字+字母、纯数字、纯字母3类验证码,已经调试成功,下载即用。 3、基于VS2015,C#
这为后续编写验证码生成逻辑提供了必要的工具。 ```csharp using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System...
在C#编程语言中,我们可以创建自己的图形验证码生成器。下面我们将详细探讨如何用C#来实现这一功能。 首先,我们需要引入必要的库。在C#中,我们通常会使用System.Drawing命名空间,因为它包含了创建和操作图像所需...
C#生成Gif源码,使用c#生成gif动画验证码及给gif动画加上水印代码
**验证码生成** 在`GenerateCheckCode`方法中,首先定义了两个随机整数`intFirst`和`intSec`,其取值范围为1到10。接下来,根据随机数决定生成加法还是减法运算: - 如果是减法,则需要确保被减数大于减数,以...
本项目 ".NET C# 页面登录验证码生成" 提供了一种在C# Web应用中实现验证码的方法。以下将详细讲解验证码的生成原理和在.NET C# 中的实现步骤。 1. **验证码的基本原理**: - 验证码的主要目的是区分人类和机器,...