.net完整的图文验证
摘自:http://blog.csdn.net/durongjian/article/details/4336380
一、创建ValidaeCode类库工程:
1、创建ValidaeCode类库工程,在[解决胜方案资源管理器]面板中,右键单击[ValidateCode]节点,并选择[属性]命令。
2、单击[属性]命令,选中[应用程序],半分别把程序集名称和默认命名空间两个属性值设为“ASPNETAJAXWeb.ValidateCode”和“ASPNETAJAXWeb.ValidateCode.Page”。
3、ValidateCode.cs:

using System;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.IO;
/// <summary>
///ValidateCode 的摘要说明
/// </summary>
namespace ASPNETAJAXWeb.ValidateCode.Page
{
public class ValidateCode : System.Web.UI.Page
{
private const double IMAGELENGTHBASE = 12.5;
private const int IMAGEHEIGTH = ;
private const int IMAGELINENUMBER = ;
private const int IMAGEPOINTNUMBER = ;
public static string VALIDATECODEKEY = "VALIDATECODEKEY";
private int length = ;//验证码的数字个数
private string code = string.Empty;
public ValidateCode()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
public int Length
{
get { return length; }
set { length = value; }
}
public string Code
{
get { return Code; }
} /// <summary>
/// 创建随机验证码
/// </summary>
/// <param name="length"></param>
/// <returns></returns>
public string CreateCode(int length)
{
if (length <= )
return string.Empty;
Random random = new Random();
StringBuilder sbCode = new StringBuilder();
for (int i = ; i < length; i++)
{
sbCode.Append(random.Next(, ));
}
code = sbCode.ToString();
Session[VALIDATECODEKEY] = code;
return code;
} /// <summary>
/// 创建验证码的图片和验证码
/// </summary>
/// <param name="code"></param>
public void CreateValidateImage(string code)
{
if (string.IsNullOrEmpty(code) == true)
return;
Session[VALIDATECODEKEY] = code;
Bitmap image = new Bitmap((int)Math.Ceiling((code.Length * IMAGELENGTHBASE)), IMAGEHEIGTH);
Graphics g = Graphics.FromImage(image); ///随机数生成器
Random random = new Random();
try
{
g.Clear(Color.White);
///绘制图片的干扰线
int x1, x2, y1, y2;
for (int i = ; i < IMAGELINENUMBER; i++)
{
x1 = random.Next(image.Width);
x2 = random.Next(image.Height);
y1 = random.Next(image.Width);
y2 = random.Next(image.Height);
} ///绘制验证码
Font font = new Font("TaHoma", , FontStyle.Bold | FontStyle.Italic);
LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(, , image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(code, font, brush, 2.0f, 2.0f); ///画图片的前景噪音点
int x, y;
for (int i = ; i < IMAGEPOINTNUMBER; i++)
{
x = random.Next(image.Width);
y = random.Next(image.Height);
///绘制点
image.SetPixel(x, y, Color.FromArgb(random.Next()));
} ///
g.DrawRectangle(new Pen(Color.Silver), , , image.Width - , image.Height - ); ///
MemoryStream ms = new MemoryStream();
image.Save(ms, ImageFormat.Gif); ///
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
} protected override void OnLoad(EventArgs e)
{
CreateValidateImage(length);
}
public void CreateValidateImage(int length)
{
code = CreateCode(length);
CreateValidateImage(code);
}
}
}
4、在另外一个ASP.NET应用程序中添加Web窗体页ValidateCode.aspx,并删除该页面的代码隐藏文件(ValidateCode.aspx.cs)。
5、删除 ValidateCode.aspx页面的HTML代码,仅仅保留一行使用“@Page”指令的如下代码:
<%@ Page Language="C#" AutoEventWireup="false" Inherits="ASPNETAJAXWeb.ValidateCode.Page.ValidateCode" %>
6、使用图文验证页面:把 ValidateCode.aspx页面复制到要使用该页面的ASP.NET应用程序中,使用引用的方法把程序集添加到Bin目录下,在使用验证码的页面上添加一下Image控件,并将该控件的ImageUrl属性的值设置为ValidateCode.aspx。
<asp:Image ID="Image1" runat="server" ImageUrl="~/ValidateCode.aspx" />
7、可通过判断Session["VALIDATECODEKEY"]与用户所输入的值是否相等检查用户输入的验证码是否正确。
.net完整的图文验证的更多相关文章
- jquery-4 完整表单验证实例
jquery-4 完整表单验证实例 一.总结 一句话总结:在form的jquery对象中返回false即可终止表单提交. 1.验证的显示错误消息如何布局? 开始时隐藏,出现错误后显示 10 .erro ...
- Linux系统(X64)安装Oracle11g完整安装图文教程另附基本操作
一:查看本地ssh服务 Linux系统下安装启动ssh服务,下面以CentOS版本Linux系统为例: 1.检查是否装了SSH包 rpm -qa |grep ssh 2.没有安装SSH直接YUM安装 ...
- 完整注册+JQuery验证+selert后台校验
Java代码 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8 ...
- Android 代码混淆、第三方平台加固加密、渠道分发 完整教程(图文)
第一步:代码混淆(注意引入的第三方jar) 在新版本的ADT创建项目时,混码的文件不再是proguard.cfg,而是project.properties和proguard-project.txt. ...
- Linux系统(X64)7 安装Oracle11g完整安装图文教程另附基本操作
在linux 7.6 安装 oracle 11g mount 挂载yum源 yum –y sys* gcc* lib* sys* ma* un* gli* elf* bin* com* ...
- 比较完整的URL验证
转自:http://wuchaorang.2008.blog.163.com/blog/static/4889185220135279223253/ function IsURL(str_url){v ...
- Linux系统(X32)安装Oracle11g完整安装图文教程另附基本操作
一.修改操作系统核心参数 在Root用户下执行以下步骤: )修改用户的SHELL的限制,修改/etc/security/limits.conf文件 输入命令:vi /etc/security/limi ...
- Linux 安装Oracle11g完整安装图文教程另附基本操作 (分享)
一.修改操作系统核心参数 在Root用户下执行以下步骤: 1)修改用户的SHELL的限制,修改/etc/security/limits.conf文件 输入命令:vi /etc/security/lim ...
- Asp.net MVC验证那些事(4)-- 自定义验证特性
在项目的实际使用中,MVC默认提供的Validation Attribute往往不够用,难以应付现实中复杂多变的验证需求.比如, 在注册用户的过程中,往往需要用户勾选”免责声明”,这个checkbox ...
随机推荐
- 如何中断正在执行IO的 Quartz 作业
Interrupt a Quartz job that doing IO 如果你想中断正在执行IO的 Quartz 作业,在你使用 InterruptibleChannel 时这是可行的.引用一下Or ...
- unity3d-地图制作之光照贴图Lightmapping
今天无聊随便翻看了暗黑战神的场景资源,发现了一个以前没怎么注意的静态场景优化问题. 什么是静态场景,也就是说这个场景是不会变化.比如MMO游戏中选择人物的场景. 就拿默认的暗黑战神的选择人物场景来看, ...
- [Linux] Systemd 入门教程:命令篇
reference : http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html Systemd 是 Linux 系统 ...
- EasyUI Pagination 分页的两种做法
EasyUI 的 datagrid 支持服务器端分页,但是官方的资料比较少,以下总结了两种 datagrid 的服务器端分页机制,可根据情况具体使用. 一:使用 datagrid 默认机制 后台: p ...
- 23.读写锁ReadWriteLock
ReentrantReadWriteLock 所谓的读写锁,是访问资源共享共享锁.互斥锁,如果对资源加了写锁,其他线程无法获取写锁与读锁,但是持有写锁的线程,可以对资源 加读锁:如果一 ...
- Command 命令模式 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 学习技巧-如何在IBM官网寻找学习资料
场景:最近看招聘职位TM1比较火,于是就想找一下Cognos TM1的资料来拜读一下,然后论坛都是大价钱的金币,迫于无奈只好来到IBM的官网来寻求指导 http://www.ibm.com/us/en ...
- Android网络缓存的实现思路
在开发群里有多位同学问到了关于Android中网络缓存的问题.事实上不管是Android还是iOS,缓存的大致思路都是同样的,以下就几种情况下的缓存做一个大致的介绍.顺便说一下有些开源的网络请求框架已 ...
- Python模拟登录wap版百度贴吧+自己主动回贴
模拟登录的原理都差点儿相同.大致都是这样: 打开首页获取相关cookie: 提交登陆表单(即username与password). 确认是否登录成功. 假设想了解更具体的原理与相关知识,推荐到具体解释 ...
- Discuz常见小问题-如何修改UCenter创始人密码
http://faq.comsenz.com/viewnews-925 参照上面这个帖子,把tools.php下载下来并放到uc_server目录下,打开文件,找到第10行设置一个初始工具箱密码 ht ...