作web总会要用到验证码!刚开始感觉这个东西挺难的,慢慢的感觉这个其实比较简单,只要写多了,感觉也就那么回事。我对他的理解是,首先要搞清实现他的一个基本思路,然后了解实现他的个别方法。这个就够了,没必要可以刻意记忆,以后要用到时,翻开代码,看一下。基本就知道怎么回事了。不过我还是总自己写过的几个验证码归结一下。
1,定义一个方法,生成验证码
2,使用一般处理程序(HttpHandler)
一般处理程序WaterMark.ashx的代码:
然后在页面中的img标签中src属性指定到这个一般处理程序即可
验证码:<img src="Handler/WaterMark.ashx" id="vimg" alt=" 单击可更换内容" onclick="change()" />
3,使用ASP.NET的代码后置生成验证码
最后在使用的页面中将img标签的src指定为这个页面文件.指定时需要注意生成验证码的这个文件的路如
<img id="Img1" style="width:65px; height:22px; cursor:hand;" src="../verifycode.aspx" alt="" align="middle"/>
1,定义一个方法,生成验证码
public class Common { /// <summary> /// 生成验证字符 /// </summary> /// <param name="len">验证字符的长度</param> /// <returns></returns> public static string ValidateCode(int len) { string Charscode = "abcdefghijklmopqrstuvwxyz123456789";//定义生成验证码的字符串 Random r = new Random(DateTime.Now.Millisecond); string resultCode = "";//用于存放生成的验证码 for (int i = 0; i < len; i++) { resultCode += Charscode[r.Next(len)]; } return resultCode; } /// <summary> /// 将指定的验证字符绘制在特定的场景中 /// </summary> /// <param name="validateCode">验证字符</param> /// <returns></returns> public static Byte[] CreateValidateCode(string validateCode) { //场景对象 Bitmap bmp = new Bitmap(validateCode.Length * 12, 22); //根据场景构造绘图对象 Graphics g = Graphics.FromImage(bmp); g.Clear(Color.White);//清除场景背景色并用白色替代 //绘制场景时所需的参数对象 Font f=new Font("Arial",12f,FontStyle.Bold|FontStyle.Italic); Rectangle rg=new Rectangle(0,0,bmp.Width,bmp.Height); LinearGradientBrush brush=new LinearGradientBrush(rg,Color.Red,Color.Green,1.2f,true); Pen p=new Pen(Color.Silver); //设置绘图的画笔 //定义随机数 Random r = new Random(DateTime.Now.Millisecond); //绘制干扰线 for(int i=0;i<25;i++) { int StartX=r.Next(bmp.Width); int StartY=r.Next(bmp.Height); int EndX=r.Next(bmp.Width); int EndY=r.Next(bmp.Height); g.DrawLine(p, StartX, StartY, EndX, EndY); //绘线 } //绘制干扰点 for (int i = 0; i < 25; i++) { int x=r.Next(bmp.Width); int y=r.Next(bmp.Height); int red=r.Next(255); int green=r.Next(255); int blue=r.Next(255); bmp.SetPixel(x, y, Color.FromArgb(red, green, blue)); } //将字符串绘制到场景中 g.DrawString(validateCode, f, brush, 3, 3); //创建用于保存图片的缓冲流 System.IO.MemoryStream ms=new System.IO.MemoryStream(); //将图片保存到缓冲区中 bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); bmp.Dispose(); return ms.ToArray(); } //调用CreateValidateCode方法,生成验证码 public ActionResult CreateValidateCode() { string validatecode = ValidateCode(5); Session["sn"] = validatecode; Byte[] b = CreateValidateCode(validatecode); return File(b, "image/jpeg"); } }
2,使用一般处理程序(HttpHandler)
一般处理程序WaterMark.ashx的代码:
<%@ WebHandler Language="C#" Class="WaterMark" %> using System; using System.Web; using System.Drawing; using System.Drawing.Drawing2D; using System.Web.SessionState; public class WaterMark : IHttpHandler, IRequiresSessionState // 要使用session必须实现该接口,记得要导入System.Web.SessionState命名空间 { public void ProcessRequest(HttpContext context) { string checkCode = GenCode(5); // 产生5位随机字符 context.Session["Code"] = checkCode; //将字符串保存到Session中,以便需要时进行验证 System.Drawing.Bitmap image = new System.Drawing.Bitmap(70, 22); Graphics g = Graphics.FromImage(image); try { //生成随机生成器 Random random = new Random(); //清空图片背景色 g.Clear(Color.White); // 画图片的背景噪音线 int i; for (i = 0; i < 25; i++) { int x1 = random.Next(image.Width); int x2 = random.Next(image.Width); int y1 = random.Next(image.Height); int y2 = random.Next(image.Height); g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); } Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold)); System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, true); g.DrawString(checkCode, font, brush, 2, 2); //画图片的前景噪音点 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); System.IO.MemoryStream ms = new System.IO.MemoryStream(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); context.Response.ClearContent(); context.Response.ContentType = "image/Gif"; context.Response.BinaryWrite(ms.ToArray()); } finally { g.Dispose(); image.Dispose(); } } /// <summary> /// 产生随机字符串 /// </summary> /// <param name="num">随机出几个字符</param> /// <returns>随机出的字符串</returns> private string GenCode(int num) { string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//"的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严"; char[] chastr = str.ToCharArray(); // string[] source ={ "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", "#", "$", "%", "&", "@" }; string code = ""; Random rd = new Random(); int i; for (i = 0; i < num; i++) { //code += source[rd.Next(0, source.Length)]; code += str.Substring(rd.Next(0, str.Length), 1); } return code; } public bool IsReusable { get { return false; } } }
然后在页面中的img标签中src属性指定到这个一般处理程序即可
验证码:<img src="Handler/WaterMark.ashx" id="vimg" alt=" 单击可更换内容" onclick="change()" />
3,使用ASP.NET的代码后置生成验证码
using System; using System.Collections; using System.Configuration; using System.Data; using System.Linq; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Xml.Linq; using System.Drawing.Imaging; using System.Drawing.Drawing2D; using System.Drawing; using System.IO; namespace JXC.Admin.inc { public partial class verifycode : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if(!ispostback) { this.CreateCode(this.CreateStr()); Session["check_code"] = CreateStr(); } } protected string CreateStr() { string str = ""; Random random = new Random(); str = random.Next(1000,9999).ToString(); return str; } protected void CreateCode(string code) { if (code.Length == 0) return; Random random = new Random(); Bitmap map = new Bitmap(4*14,30);//定义一个宽度为4*13,高度为30像素的位图 Graphics g = Graphics.FromImage(map); g.Clear(Color.White); g.DrawRectangle(new Pen(Color.Gray), 0, 0, map.Width - 1, map.Height - 1);//进行描边 //...开始写字 Matrix matrix;//声明用来操作矩阵的类 LinearGradientBrush brush = new LinearGradientBrush(new Point(0, 0), new Point(map.Width, map.Height), Color.Red, Color.Green); for (int j = 0; j < code.Length; j++) { string schar = code.Substring(j,1); matrix = g.Transform;//获取当前绘图的世界坐标系。 float shearx = 0.0F; float sheary = 0.0F; matrix.Shear(shearx,sheary); g.Transform = matrix; g.DrawString(schar,new Font("黑体",14.0f,FontStyle.Bold),brush,new PointF(0.0f+(13.0f*j),random.Next(30-20))); } //画干扰线 int x1=random.Next(map.Width); int y1=random.Next(map.Height); int x2=random.Next(map.Width); int y2=random.Next(map.Height); g.DrawLine(new Pen(Color.Black),new Point(x1,y1),new Point(x2,y2)); //画干扰点 for(int i=0;i<10;i++) { map.SetPixel(random.Next(map.Width),random.Next(map.Height),Color.FromArgb(random.Next(255),random.Next(255),random.Next(255))); } Response.Clear(); MemoryStream stream=new MemoryStream(); map.Save(stream,ImageFormat.Gif); Response.ContentType="image/Gif"; Response.BinaryWrite(stream.ToArray()); } } }
最后在使用的页面中将img标签的src指定为这个页面文件.指定时需要注意生成验证码的这个文件的路如
<img id="Img1" style="width:65px; height:22px; cursor:hand;" src="../verifycode.aspx" alt="" align="middle"/>
发表评论
-
详解HTTP中GET和POST的区别
2015-01-08 08:41 627http://www.jellythink.com/archi ... -
后台查找页面上所有的TextBox控件
2013-01-03 14:26 1623呵呵~记下来 foreach (Cont ... -
GetCallbackEventReference实用讲解
2012-12-24 10:44 915一. 描述 在开发winform程序时不会考虑页面刷新问题, ... -
ASP.NET页面Trace技巧
2012-07-24 17:57 887做过ASP.NET开发的人都知道Trace指令是一个非常有用的 ... -
对ViewState的解析
2012-05-23 15:52 1321最近做项目,使用GridView进行数据编辑,怎么也获取不到用 ... -
ASP.NET验证控件[转]
2012-05-09 17:07 1032一、前言 在 ... -
asp.net 实现多少秒后自动跳转到另一页面
2012-04-27 16:56 12371,在head里面加上 <meta http-eq ... -
什么是ViewState,在何处可以禁用ViewState
2012-04-24 22:20 1533【考点】 ViewState的理解。 【出现频率】 ★★★★☆ ... -
简述ASP.NET中客户端控件和服务端控件的区别
2012-04-24 22:14 2419题目:简述ASP.NET中客户 ... -
js清空FileUpload的值
2011-11-09 15:13 3911在平时项目开发中会有上传文件的功能,一般在前端会通过J ... -
用户自动义控件和Page页面的区别
2011-10-27 16:08 948主要的区别有五点: 一、用户自动义控件继承自System.We ... -
ASP.NET中的Server.MapPath()方法
2011-10-22 10:36 10491、Server.MapPath("/") ... -
ASP.NET缓存技术
2011-08-28 23:50 829用了缓存,其实就是由原来的:响应->执行->送显, ... -
ASP.NET中DataList控件模板属性说明及各功能实现效果介绍
2011-08-21 14:04 8005在用ASP.NET做网站开发过 ... -
Cookies和Session的区别
2011-08-19 22:52 1237为什么会有cookie呢,大家都知道,http是无状态的协议, ... -
ASP.NET中页面间传值方法总结
2011-08-18 13:38 984在ASP.NET网络编程中经常 ... -
ASP.NET六大对象
2011-08-18 12:49 518ASP.NET六大内置对象总结: 1.Response ...
相关推荐
JQuery调用后台的java类产生图片验证码。 很实用,下载后可以直接运行的实例! 有什么好的建议可以Q我623791070 谢谢
本项目“jsp随机验证码生成测试”提供了一个基于Java Server Pages (JSP) 实现的验证码生成实例,旨在帮助开发者理解和实践如何在Web应用程序中集成验证码功能。 验证码的主要目的是验证用户是人而不是计算机程序。...
下面将详细介绍如何在.NET Core 2.0环境下创建一个完整的图片验证码生成实例。 首先,我们需要引入必要的NuGet包。在这个例子中,我们使用了`ZKWeb.System.Drawing`,这是一个.NET Core下的图形处理库,它提供了...
总之,这个Android图片验证码生成实例代码提供了一个基础的验证码生成框架,开发者可以根据需求调整字符集、颜色、线条等参数,以适应不同的应用场景。同时,由于其代码简洁明了,适合初学者学习和理解验证码生成的...
本篇文章将详细讲解基于JavaScript(js)实现的表单验证码生成技术,以及如何自定义字符并创建高效实例。 验证码的核心功能是生成一组随机的、难以被程序自动识别的字符序列,通常包括字母、数字、甚至图形。...
在这个“ASP验证码源码实例.RAR”压缩包中,包含了创建一个简单数字验证码的ASP源代码,适合初学者学习和参考。 验证码的主要目的是为了防止自动化程序(如机器人)对网站进行恶意操作,例如注册、投票或发送垃圾...
本实例将介绍生成英文和数字混合的验证码。运行程序,在页面中将显示英文和数字混合的验证码,用户只有输入正确的验证码后,才可以完成登录。如果当前生成的验证码不容易辨认,也可以单击“看不清?换一个”超链接...
这个“一个php验证码生成类代码.zip”压缩包中包含了一个PHP验证码生成类,它能够帮助开发者轻松地创建具有背景、干扰元素和随机文本的图像验证码。 验证码类通常包括以下几个核心功能: 1. **生成随机字符串**:...
验证码是一种用于防止自动机器人或恶意程序进行欺诈行为的安全机制,常用于网站登录、表单提交等场景。在ASP(Active Server Pages)环境中,...然而,理解基础的验证码生成原理对于任何Web开发者来说都是非常有益的。
这个PHP验证码小实例对于初学者来说是个很好的起点,它涵盖了基本的图像处理、随机数生成和会话管理等概念。在实际应用中,你可能还需要考虑以下几点优化: - **安全性**:增加字符串长度,使用更复杂的字符集,...
"HFSoft.Component.NumberImage.Test"可能是一个测试项目或者包含测试代码的文件夹,用于验证组件的正确性和性能,开发者可以通过运行这些测试来确保验证码生成功能的正常工作。 使用.NET验证码生成组件时,开发者...
Java随机验证码生成实现实例代码 Java随机验证码生成实现实例代码主要介绍了java随机验证码生成实现实例代码的相关资料。下面是对标题和描述中所说的知识点的详细解释: Java随机验证码生成 Java随机验证码生成是...
Java JCaptcha验证码生成详解 验证码(CAPTCHA)是一种防止机器自动操作的安全机制,它通过让用户输入图片或音频中显示的随机字符来验证用户是否为真实的人。在Java开发中,JCaptcha是一个广泛使用的开源库,它提供...
ASP.NET验证码生成类主要用于在Web应用中创建安全的随机字符序列,用于验证用户输入是否有效,防止自动机器人或恶意程序的攻击。此类通常包括几个关键功能,如生成验证码字符串、创建验证码图片以及处理相关的安全...
**标题与描述解析** 标题中的"dotnet-HeiCaptcha"是一个专为.NET Core设计的图形验证码生成库,强调了其跨平台的特性。...同时,这个开源项目也为.NET开发者提供了一个学习图像处理和验证码生成技术的实例。
验证码生成实例,VS2010已测试,可以用。
在这个过程中,我们将探讨如何使用.NET Core 2.0和NuGet包ZKWeb.System.Drawing来创建一个完整的图片验证码生成实例。 首先,为了在.NET Core 2.0项目中使用传统的System.Drawing库,我们需要引入ZKWeb.System....
在这个实例中,我们主要关注的是`checkcode.asp`文件,这可能是一个基于ASP(Active Server Pages)的验证码生成脚本。ASP是一种微软开发的服务器端脚本语言,用于创建动态网页。 `checkcode.asp`可能是用来生成...
**验证码生成** 在`GenerateCheckCode`方法中,首先定义了两个随机整数`intFirst`和`intSec`,其取值范围为1到10。接下来,根据随机数决定生成加法还是减法运算: - 如果是减法,则需要确保被减数大于减数,以...