生成验证码程序C#
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
public partial class inc_ValidCode : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ VerifyCode v = new VerifyCode(); v.Length = ;
v.FontSize = ;
v.Chaos = true;
v.BackgroundColor = Color.White;
v.ChaosColor = Color.LightGray;
//v.CodeSerial = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,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,O,P,Q,R,S,T,U,V,W,X,Y,Z";
//v.Colors = this.colors;``````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````
//v.Fonts = this.fonts;
v.Padding = ;
string code = v.CreateVerifyCode(); //取随机码
v.CreateImageOnPage(code, this.Context); // 输出图片 //Response.Cookies.Add(new HttpCookie("fcvalidtcode", code.ToUpper()));// 使用Cookies取验证码的值
Session["bao_code"] = code.ToUpper(); } public class VerifyCode
{
#region 验证码长度(默认6个验证码的长度)#region 验证码长度(默认6个验证码的长度)
int length = ;
public int Length
{
get { return length; }
set { length = value; }
}
#endregion #region 验证码字体大小(为了显示扭曲效果,默认40像素,可以自行修改)#region 验证码字体大小(为了显示扭曲效果,默认40像素,可以自行修改)
int fontSize = ;
public int FontSize
{
get { return fontSize; }
set { fontSize = value; }
}
#endregion #region 边框补(默认1像素)#region 边框补(默认1像素)
int padding = ;
public int Padding
{
get { return padding; }
set { padding = value; }
}
#endregion #region 是否输出燥点(默认不输出)#region 是否输出燥点(默认不输出)
bool chaos = true;
public bool Chaos
{
get { return chaos; }
set { chaos = value; }
}
#endregion #region 输出燥点的颜色(默认灰色)#region 输出燥点的颜色(默认灰色)
Color chaosColor = Color.LightGray;
public Color ChaosColor
{
get { return chaosColor; }
set { chaosColor = value; }
}
#endregion #region 自定义背景色(默认白色)#region 自定义背景色(默认白色)
Color backgroundColor = Color.White;
public Color BackgroundColor
{
get { return backgroundColor; }
set { backgroundColor = value; }
}
#endregion #region 自定义随机颜色数组#region 自定义随机颜色数组
Color[] colors = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
public Color[] Colors
{
get { return colors; }
set { colors = value; }
}
#endregion #region 自定义字体数组#region 自定义字体数组
string[] fonts = { "Arial", "Georgia" };
public string[] Fonts
{
get { return fonts; }
set { fonts = value; }
}
#endregion #region 自定义随机码字符串序列(使用逗号分隔)#region 自定义随机码字符串序列(使用逗号分隔)
string codeSerial = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,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,O,P,Q,R,S,T,U,V,W,X,Y,Z";
public string CodeSerial
{
get { return codeSerial; }
set { codeSerial = value; }
}
#endregion #region 产生波形滤镜效果#region 产生波形滤镜效果 private const double PI = 3.1415926535897932384626433832795;
private const double PI2 = 6.283185307179586476925286766559; /**/
/// <summary>
/// 正弦曲线Wave扭曲图片(Edit By 51aspx.com)
/// </summary>
/// <param name="srcBmp">图片路径</param>
/// <param name="bXDir">如果扭曲则选择为True</param>
/// <param name="nMultValue">波形的幅度倍数,越大扭曲的程度越高,一般为3</param>
/// <param name="dPhase">波形的起始相位,取值区间[0-2*PI)</param>
/// <returns></returns>
public System.Drawing.Bitmap TwistImage(Bitmap srcBmp, bool bXDir, double dMultValue, double dPhase)
{
System.Drawing.Bitmap destBmp = new Bitmap(srcBmp.Width, srcBmp.Height); // 将位图背景填充为白色
System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(destBmp);
graph.FillRectangle(new SolidBrush(System.Drawing.Color.White), , , destBmp.Width, destBmp.Height);
graph.Dispose(); double dBaseAxisLen = bXDir ? (double)destBmp.Height : (double)destBmp.Width; for (int i = ; i < destBmp.Width; i++)
{
for (int j = ; j < destBmp.Height; j++)
{
double dx = ;
dx = bXDir ? (PI2 * (double)j) / dBaseAxisLen : (PI2 * (double)i) / dBaseAxisLen;
dx += dPhase;
double dy = Math.Sin(dx); // 取得当前点的颜色
int nOldX = , nOldY = ;
nOldX = bXDir ? i + (int)(dy * dMultValue) : i;
nOldY = bXDir ? j : j + (int)(dy * dMultValue); System.Drawing.Color color = srcBmp.GetPixel(i, j);
if (nOldX >= && nOldX < destBmp.Width
&& nOldY >= && nOldY < destBmp.Height)
{
destBmp.SetPixel(nOldX, nOldY, color);
}
}
} return destBmp;
}
#endregion #region 生成校验码图片#region 生成校验码图片
public Bitmap CreateImageCode(string code)
{
int fSize = FontSize;
int fWidth = fSize + Padding; int imageWidth = (int)(code.Length * fWidth) + + Padding * ;
int imageHeight = fSize * + Padding; System.Drawing.Bitmap image = new System.Drawing.Bitmap(imageWidth, imageHeight); Graphics g = Graphics.FromImage(image); g.Clear(BackgroundColor); Random rand = new Random(); //给背景添加随机生成的燥点
if (this.Chaos)
{ Pen pen = new Pen(ChaosColor, );
int c = Length * ; for (int i = ; i < c; i++)
{
int x = rand.Next(image.Width);
int y = rand.Next(image.Height); g.DrawRectangle(pen, x, y, , );
}
} int left = , top = , top1 = , top2 = ; int n1 = (imageHeight - FontSize - Padding * );
int n2 = n1 / ;
top1 = n2;
top2 = n2 * ; Font f;
Brush b; int cindex, findex; //随机字体和颜色的验证码字符
for (int i = ; i < code.Length; i++)
{
cindex = rand.Next(Colors.Length - );
findex = rand.Next(Fonts.Length - ); f = new System.Drawing.Font(Fonts[findex], fSize, System.Drawing.FontStyle.Bold);
b = new System.Drawing.SolidBrush(Colors[cindex]); if (i % == )
{
top = top2;
}
else
{
top = top1;
} left = i * fWidth; g.DrawString(code.Substring(i, ), f, b, left, top);
} //画一个边框 边框颜色为Color.Gainsboro
g.DrawRectangle(new Pen(Color.Gainsboro, ), , , image.Width - , image.Height - );
g.Dispose(); //产生波形(Add By 51aspx.com)
image = TwistImage(image, true, , ); return image;
}
#endregion #region 将创建好的图片输出到页面#region 将创建好的图片输出到页面
public void CreateImageOnPage(string code, HttpContext context)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream();
Bitmap image = this.CreateImageCode(code); image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); context.Response.ClearContent();
context.Response.ContentType = "image/Jpeg";
context.Response.BinaryWrite(ms.GetBuffer()); ms.Close();
ms = null;
image.Dispose();
image = null;
}
#endregion #region 生成随机字符码#region 生成随机字符码
public string CreateVerifyCode(int codeLen)
{
if (codeLen == )
{
codeLen = Length;
} string[] arr = CodeSerial.Split(','); string code = ""; int randValue = -; Random rand = new Random(unchecked((int)DateTime.Now.Ticks)); for (int i = ; i < codeLen; i++)
{
randValue = rand.Next(, arr.Length - ); code += arr[randValue];
} return code;
}
public string CreateVerifyCode()
{
return CreateVerifyCode();
}
#endregion
}
}
生成验证码程序C#的更多相关文章
- Java生成验证码原理(jsp)
验证码的作用: 验证码是Completely Automated Public Turing test to tell Computers and Humans Apart(全自动区分计算机和人类的 ...
- 四HttpServletResponse常见应用——生成验证码
转载自http://www.cnblogs.com/xdp-gacl/p/3791993.html 一.HttpServletResponse常见应用——生成验证码 1.1.生成随机图片用作验证码 生 ...
- 使用jsp生成验证码
在开发中验证码是比较常用到有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试的方式. 此演示程序包括三个文件: 1.index.jsp:登录页面 2.image.jsp:生成 ...
- Jquery 客户端生成验证码
验证码的作用: 1.有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上是用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行,腾讯的QQ社区),我们利用比较简 ...
- 验证码程序Demo
小伙伴都有这样的经历,册各种网站,总是输不对验证码,双十一那天狂买的小伙伴是不是对输入验证码有着不一样的感触呢,以前觉得验证码真是个麻烦鬼,一个不小心,一个眼拙,哎呦,没有输入正确,又是一阵子大眼瞪小 ...
- JAVA WEB项目中生成验证码及验证实例(附源码及目录结构)
[我是一个初学者,自己总结和网上搜索资料,代码是自己敲了一遍,亲测有效,现将所有的目录结构和代码贴出来分享给像我一样的初学者] 作用 验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计 ...
- captcha.js一个生成验证码的插件,使用js和canvas生成
一.captcha`captcha.js`是一个生成验证码的插件,使用js和canvas生成的,确保后端服务被暴力攻击,简单判断人机以及系统的安全性,体积小,功能多,支持配置. 验证码插件内容,包含1 ...
- 详细说说如何生成验证码—ASP.NET细枝末节(4)
前言 今天小编详细的说一下,ASP.NET网站开发过程中生成验证码的全部问题. 本文的目标,是让读者了解,生成验证码涉及的全部基础知识问题. 当然这里说的是比较简单的验证码. 真正符合要求的验证码,涉 ...
- javaweb基础(8)_HttpServletResponse生成验证码
一.HttpServletResponse常见应用——生成验证码 1.1.生成随机图片用作验证码 生成图片主要用到了一个BufferedImage类,
随机推荐
- python 列表排序方法reverse、sort、sorted基础篇
python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...
- lambda续集——1
捕获列表,只用于局部非static变量,lambda可以直接使用局部static变量和它所在函数之外声明的名字. eg: #include<iostream> using namespac ...
- Django 缓存、信号
Reference: http://www.cnblogs.com/lianzhilei/p/6365877.html 缓存 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访 ...
- 新闻门户网站图集相册JS代码
新闻网站jQuery图集相册代码,支持键盘方向键切换,支持点击图片左右区域切换,支持自动轮播,带缩略图.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class= ...
- discuz论坛折腾记录
1.邮箱验证 自带的是用php sendmail,好在可以用smtp 如果用企业邮箱,一般都是ssl,需要设置为,参考此帖 STMP服务器 - QQ 企业邮ssl://smtp.exmail.qq.c ...
- 关于Java开发过程中质量提升-2自动化
开发人员写代码过程中就实现自动代码检视,编辑器会提示编码规范错误,并给出正确实例,写完代码只需要提交到SVN库,然后启动自动化构建(可配置代码提交SVN后自动触发),测试环境中的项目马上和当前SVN库 ...
- 线程安全,有状态,无状态的对象<转>
进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位.线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.另外 ...
- [转]RosBridge小结
1.rosbridge介绍 rosbridge(rosbridge_suite)是ros官方为开发者提供的一个用于非ros系统和ros系统进行交互通信的功能包.rosbridge主要包含两个部分,Ro ...
- zend opcache的最佳设置
2016-01-21 在网上无意中看到的一篇文章,这哥们非常简洁地谈论了zend opcache的最佳设置,他说他为此花了大量的时间探索zend opcache的每个设置选项的细节,甚至是阅读它的源代 ...
- daterangepicker 使用方法总结
daterangepicker 是一个时间段选择插件.官网地址:http://www.daterangepicker.com/ 项目中需要实现如下图的效果: 1.引入该插件所需要的JS 和 CSS , ...