网页登陆校验码C#版代码
[DefaultProperty("Text")]
[ToolboxData("<{0}:ValidateCode runat=server></{0}:ValidateCode>")]
public class ValidateCode : WebControl
{
/// <summary>
/// 记录随机生成的验证码
/// </summary>
private string _checkCode = string.Empty;
/// <summary>
/// 用于记录验证码的位数,初始值为4
/// </summary>
private int _codeLen = ;
/// <summary>
/// Bindable:用于设置该属性是否可以绑定数据
/// Category:设置属性显示在“按分类顺序”模式时,分组的类别名称
/// Browsable:是否显示在控件的属性面板中
/// DefaultValue:指定属性的默认值
/// Description:指定属性的说明文字
/// </summary>
[Bindable(true), Category("Appearance"), Browsable(true), DefaultValue(true), Description("此属性用于设置验证码的长度")]
public int CodeLength
{
get
{
return _codeLen;
}
set
{
_codeLen = value;
}
}
/// <summary>
/// 生成随机验证码
/// </summary>
/// <returns></returns>
private string GetValidateCode()
{
//创建一个字符数组,用于存储组成验证码的数字和英文字母
char[] s = new char[]{'','','','','','','','','a'
,'b','c','d','e','f','g','h','i','j','k','m','n','p','q'
,'r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G'
,'H','I','J','K','L','M','N','P','Q','R','S','T','U','V','W'
,'X','Y','Z'};
string num = "";//创建变量用于记录指定长度的验证码的值
Random r = new Random();//生成随机生成器
//根据用户需要的长度来定义验证码的位数
for (int i = ; i < _codeLen; i++)
{
num += s[r.Next(, s.Length)].ToString();
}
return num;//返回生成的随机验证码的值
}
/// <summary>
/// 绘制图形验证码
/// </summary>
/// <param name="checkCode">随机生成的验证码</param>
private void CreateCheckCodeImage(string checkCode)
{
System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 14.5)), );//创建画布,用于绘制验证码
Graphics g = Graphics.FromImage(image);//声明Graphics对象
try
{
Random random = new Random(); //生成随机生成器
g.Clear(Color.White); //清空图片背景色
Font font = new System.Drawing.Font("宋体", , (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));//设置字体
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(, , image.Width, image.Height), Color.Green, Color.Red, 1.2f, true);//设置笔刷
g.DrawString(checkCode, font, brush, , );//将验证码绘制到画布中
for (int i = ; i < ; i++) //画图片的前景噪音点
{
int x = random.Next(image.Width);
int y = random.Next(image.Height);
image.SetPixel(x, y, Color.FromArgb(random.Next()));
}
HttpContext.Current.Response.Cookies["code"].Value = checkCode;//将验证码存入cookie中
//画图片的边框线
g.DrawRectangle(new Pen(Color.Silver), , , image.Width - , image.Height - );
System.IO.MemoryStream ms = new System.IO.MemoryStream();//创建内存流
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);//将验证码图片存入内存流
Page.Response.Clear();//清除缓冲区流中所有内容输出
Page.Response.ContentType = "image/GIF";//设置输出流类型
Page.Response.BinaryWrite(ms.ToArray());//写入输出流
Page.Response.Flush();//向客户端发送输出流
ms.Close();//释放资源
ms.Dispose();//释放资源
Page.Response.End();
}
catch (Exception ex)
{
throw ex;
}
finally
{
g.Dispose();
image.Dispose();
}
}
/// <summary>
/// 控件加载事件
/// </summary>
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
try
{
string sn = Page.Request.QueryString["_ImageTag"];//获取页面传递的参数
if (sn != null)//判断参数是否为空,如果不为空时才能生成验证码,并绘制输出到页面
{
_checkCode = GetValidateCode();//生成验证码
CreateCheckCodeImage(_checkCode);//绘制输出到页面
}
else
{
//创建一个JavaScript函数用于生成随机数
string script = @"<script language='JavaScript'>
function getnum()
{
var num=Math.floor(Math.random()*100);
return num;
}
</script>";
//将该方法注册到控件所在的页面中
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "getnum", script);
}
}
catch { }
}
protected override void RenderContents(HtmlTextWriter output)
{
string CID = string.Empty;
try
{
if (string.IsNullOrEmpty(_checkCode))//首先判断是否生成了验证码
{
CID = this.UniqueID + "img";//设置页面IMG的ID值
//输出表格到页面
output.Write("<table cellpadding=\"0\" cellspacing=\"0\" >");
output.Write("<tr>");
output.Write("<td>");
output.Write("<img border=\"0\" src=\"{0}\" id=\"{1}\"/>", this.Page.Request.Path + "?_ImageTag=" + DateTime.Now.Second, CID);//输出img图片,并且指定其src地址,因为验证码控件是被输出到当前的页面中,所以接收当前页面地址作为图片的数据源
output.Write("</td>");
output.Write("<td>");
output.Write("<a style=\"cursor:pointer;font-size:small\" onclick=\"document.getElementById('" + CID + "').src=" + "'" + this.Page.Request.Path + "?_ImageTag='" + "+getnum()" + "\"" + "> 看不清?</a>");//创建一个连接,单击后无刷新更换验证码
output.Write("</td>");
output.Write("</tr>");
output.Write("</table>");
}
}
catch
{
output.Write("<table cellpadding=\"0\" cellspacing=\"0\" >");
output.Write("<tr>");
output.Write("<td>");
output.Write("</td>");
output.Write("<td>");
//显示“看不清?”链接
output.Write("<a style=\"cursor:pointer;font-size:small\"" + "> 看不清?</a>");
output.Write("</td>");
output.Write("</tr>");
output.Write("</table>");
}
}
/// <summary>
/// 公共方法用于验证输入的验证码是否正确
/// </summary>
public bool CheckSN(string sn)
{
bool flag = false;
if (HttpContext.Current.Request.Cookies["code"].Value != null)//如果cookie不为空
{
flag = sn.ToLower() == HttpContext.Current.Request.Cookies["code"].Value.ToString().ToLower();//判断记录的cookie与输入的验证码是否一致
}
return flag;
}
}
网页登陆校验码C#版代码的更多相关文章
- Java 获取 文件md5校验码
讯雷下载的核心思想是校验文件的md5值,两个文件若md5相同则为同一文件. 当得到用户下载某个文件的请求后它根据数据库中保留的文件md5比对出拥有此文件的url, 将用户请求挂接到此url上并仿造一个 ...
- Python3.x:获取登录界面校验码图片
Python3.x:获取登录界面校验码图片 实例代码: # python3 # author lizm # datetime 2018-06-01 18:00:00 # -*- coding: utf ...
- 基于jQuery仿QQ音乐播放器网页版代码
基于jQuery仿QQ音乐播放器网页版代码是一款黑色样式风格的网页QQ音乐播放器样式代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class="m ...
- 网页头一定要加的代码段(加注版)一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10
网页头部常见的一段代码 <!--[if lt IE 7 ]><html class="ie6"><![endif]--> <!--[i ...
- 公民身份号码校验码算法(C#版)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- [技术栈]CRC校验原理及C#代码实现CRC16、CRC32计算FCS校验码
1.CRC.FCS是什么 CRC,全称Cyclic Redundancy Check,中文名称为循环冗余校验,是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检 ...
- Java获取字符串的CRC8校验码(由C程序的代码修改为了Java代码)
CRC8算法请百度,我也不懂,这里只是把自己运行成功的结构贴出来了.方法CRC8_Tab这里没有处理,因为我的程序中没有用到. package com.crc; public class CCRC8_ ...
- 微信开放平台开发——网页微信扫码登录(OAuth2.0)
1.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供 ...
- Java SpringMVC实现PC端网页微信扫码支付完整版
一:前期微信支付扫盲知识 前提条件是已经有申请了微信支付功能的公众号,然后我们需要得到公众号APPID和微信商户号,这个分别在微信公众号和微信支付商家平台上面可以发现.其实在你申请成功支付功能之后,微 ...
随机推荐
- MAC 下安装opencv遇到问题的解决方法(安装homebrew, wget)
遇到问题: (1)Mac安装OpenCV下载ippicv_macosx_20141027.tgz失败解决方案 先附上当时的报错信息: -- ICV: Downloading ippicv_macosx ...
- 单点登录SSO的实现原理
单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任.单点登录在大型网站里使用得 ...
- MySQL执行计划 EXPLAIN参数
MySQL执行计划参数详解 转http://www.jianshu.com/p/7134286b3a09 MySQL数据库中,在SELECT查询语句前边加上“EXPLAIN”或者“DESC”关键字,即 ...
- Servlet(2)
一.伪代码演示Tomcat的内部代码运行 1).通过映射找到servlet-class的内容,字符串:com.gqx.servlet.FirstServlet 2).通过反射构造构造FirstServ ...
- NPOI组件集锦
关于NPOI不错的介绍:http://www.cnblogs.com/restran/p/3889479.html http://www.cnblogs.com/Irving/archive/2012 ...
- 模仿微信"转你妹"游戏
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 用Gitosis搭建Git服务器(经典资料)
该文档介绍了用Gitosis自己搭建Git服务器,文章来自于<Git权威指南>一书的第31章,讲述详细易懂易操作,是搭建Git服务器绝好资料! 下载地址:http://download.c ...
- Android保存设置的PreferenceActivity
界面XML文件:preference_setting.xml <?xml version="1.0" encoding="UTF-8"?> < ...
- 和菜鸟一起学linux内核源码之基础准备篇 系列 体系结构图
http://blog.csdn.net/eastmoon502136/article/details/8711104
- struts2操作pojo之小工程struts2ActionPOJO
下面的源码和操作步骤依据java web整合开发王者归来第16章,16.7 Action中使用POJO:p464 pojo:就是javabean的意思,下面就是struts2操作javabean代码过 ...