网页登陆校验码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和微信商户号,这个分别在微信公众号和微信支付商家平台上面可以发现.其实在你申请成功支付功能之后,微 ...
随机推荐
- RDD.scala(源码)
---- map. --- flatMap.fliter.distinct.repartition.coalesce.sample.randomSplit.randomSampleWithRange. ...
- ab apache Benchmarking中链接的写法 记得加上/
C:\wamp\bin\apache\Apache2.2.21\bin>ab.exe -n5 -c5 http://www.baidu.com ab.exe: invalid URL Usage ...
- hdoj 4738 Caocao's Bridges【双连通分量求桥】
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- Linux中统计某个文件夹的大小
进入这个文件夹内 然后du -sh命令
- 网上下载的 java开源项目 如何 打jar包
目前很多java开源项目(例如qlexpress)只提供了源码,没有提供jar,下面提供maven打jar包的方法. 1.进入qlexpress下载后源代码所在的目录,此目录应包含pom.xml,如下 ...
- 通过Navicat for MySQL远程连接的时候报错mysql 1130的解决方法
在用本地的navicat连接服务器的mysql数据库时候出现下面的问题: 解决的方法: 解决方法: 1.改表法.可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhos ...
- 去掉cajviewer 右上角的“中国知网数字出版物超市
cajviewer软件是一款可以提取pdf字码的软件(即使pdf是扫描版的) 下面是转的一个博文可以去除软件右上角图标的方法: 去掉cajviewer 7.1.2右上角的“中国知网数字出版物超市” 1 ...
- ATL 工程下添加右击菜单
首先在dllmain.cpp中添加如下声明 HINSTANCE g_hInstance; g_hInstance = hInstance; 源码如下: CPoint point; ::GetCur ...
- 使用 JSSE 定制 SSL 连接的属性--转载
当数据在网络上传播的时候,通过使用 SSL 对其进行加密和保护,JSSE 为 Java 应用程序提供了安全的通信.在本篇有关该技术的高级研究中,Java 中间件开发人员 Ian Parkinson 深 ...
- hdu2074java
叠筐 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...