.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 ... 
随机推荐
- scala编程第17章学习笔记(1)——集合类型
			列表 列表的初始化及对其首尾的访问: scala> val colors = List("red", "blue", "green") ... 
- 安全开发 | 如何让Django框架中的CSRF_Token的值每次请求都不一样
			前言 用过Django 进行开发的同学都知道,Django框架天然支持对CSRF攻击的防护,因为其内置了一个名为CsrfViewMiddleware的中间件,其基于Cookie方式的防护原理,相比基于 ... 
- Vue路由scrollBehavior滚动行为控制锚点
			使用前端路由,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新加载页面那样. vue-router 能做到,而且更好,它让你可以自定义路由切换时页面如何滚动. 注意: 这个功能只 ... 
- Android GUI之Window、WindowManager
			通过前几篇的文章(查看系列文章:http://www.cnblogs.com/jerehedu/p/4607599.html#gui ),我们清楚了Activity实际上是将视图的创建和显示交给了Wi ... 
- 又议android中的manifest清单文件
			写过java程序的人,都知道了配置文件时java实现各种各样的框架的一大利器,manifest清单文件对android的作用自然不言而喻,然而他里面究竟定义了些什么,并且他是如何加载到程序中的. 他里 ... 
- Realm Swift
			Realm Swift 当前这个翻译,主要是方便我自己查阅api,有非常多地方写的比較晦涩或者没有翻译,敬请谅解 version 0.98.7 官方文档 參考文献 Realm支持类型 String,N ... 
- 8. 利用反射机制, ListArray,intent来实现多Activity的切换
			package com.example.thenewboston; import android.app.ListActivity; import android.content.Intent; im ... 
- UE如何将某些字符替换成换行
			如下所示,我想要在所有;后面加个回车 就把;替换成;^r^n 效果如下所示 
- Java 吸血鬼数字
			非常羞愧(事实上没什么羞愧.水平就这样).搞了半晌才写出来了一个Java 版求四位吸血鬼数字的方法 吸血鬼数字是指位数为偶数的数字.能够由一对数字相乘而得到.而这对数字各包括乘积的一半位数的数字,当中 ... 
- Mysql分区的技能
			1. 查看分区信息 (1)explain partitions select * from TDM_YTMF_BRAND_CATE_GDS_STC_D 语法:explain partitions se ... 
