验证码生成页面代码(清理掉没用的html)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Threading;
using System.Drawing.Text;
using System.Drawing.Drawing2D; namespace ZhuoYueE.Dop.Web.UI.FenFa
{
public partial class CodeImg : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string randomcode = CreateRandomCode();
Session["Code"] = randomcode;
this.CreateImage(randomcode);
} /// 生成随机码
/// </summary>
/// <param name="length">随机码个数</param>
/// <returns></returns>
private string CreateRandomCode(int length)
{
int rand;
char code;
string randomcode = String.Empty; //生成一定长度的验证码
System.Random random = new Random();
for (int i = ; i < length; i++)
{
start:
rand = random.Next(); if (rand % == )
{
code = (char)('A' + (char)(rand % ));
}
else
{
code = (char)('' + (char)(rand % ));
}
if (code == '' || code == 'o' || code == 'O' || code == '' || code == 'i' || code == 'I' || code == 'l')
goto start;
randomcode += code.ToString();
}
return randomcode;
} /// <summary>
/// 创建随机码图片
/// </summary>
/// <param name="randomcode">随机码</param>
private void CreateImage(string randomcode)
{
//定义颜色
Random rand = new Random(); Color c = Color.FromArgb(rand.Next(), rand.Next(), rand.Next()); int randAngle = ; //随机转动角度
int mapwidth = (int)(randomcode.Length * );
Bitmap map = new Bitmap(mapwidth, );//创建图片背景
Graphics graph = Graphics.FromImage(map);
graph.Clear(Color.FromArgb(rand.Next(, ), rand.Next(, ), rand.Next(, )));//清除画面,填充背景
graph.DrawRectangle(new Pen(Color.Black, ), , , map.Width - , map.Height - );//画一个边框
//graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//模式 //背景噪点生成
//Pen blackPen = new Pen(c[cindex], 0);
//for (int i = 0; i < 30; i++)
//{
// int x = rand.Next(0, map.Width);
// int y = rand.Next(0, map.Height);
// graph.DrawRectangle(blackPen, x, y, 1, 1);
//} //验证码旋转,防止机器识别
char[] chars = randomcode.ToCharArray();//拆散字符串成单字符数组 //文字距中
StringFormat format = new StringFormat(StringFormatFlags.NoClip);
format.Alignment = StringAlignment.Center;
format.LineAlignment = StringAlignment.Center; //定义字体
string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体", "Microsoft New Tai Lue" }; int Count = font.Length; LinearGradientBrush b = new LinearGradientBrush(
new Point(, ), new Point(, ),
Color.FromArgb(rand.Next(), rand.Next(), rand.Next()),
Color.FromArgb(rand.Next(), rand.Next(), rand.Next())); for (int i = ; i < chars.Length; i++)
{
int findex = rand.Next(Count); //渐变色:起点(0, 0)从红色 --->终点(250, 250)蓝色 Font f = new System.Drawing.Font(font[findex], , System.Drawing.FontStyle.Bold);//字体样式(参数2为字体大小) // Brush b = new System.Drawing.SolidBrush(c); Point dot = new Point(, );
//graph.DrawString(dot.X.ToString(),fontstyle,new SolidBrush(Color.Black),10,150);//测试X坐标显示间距的
float angle = rand.Next(-randAngle, randAngle);//转动的度数 graph.TranslateTransform(dot.X, dot.Y);//移动光标到指定位置
graph.RotateTransform(angle);
graph.DrawString(chars[i].ToString(), f, b, , , format);
//graph.DrawString(chars[i].ToString(),fontstyle,new SolidBrush(Color.Blue),1,1,format);
graph.RotateTransform(-angle);//转回去
graph.TranslateTransform(-, -dot.Y);//移动光标到指定位置,每个字符紧凑显示,避免被软件识别
} //画干扰线
Graphics graph1 = Graphics.FromImage(map);
int intw = map.Width / ;
int inth = map.Height / ;
for (int i = ; i < ; i++)
{
int x1, x2, y1, y2;
x1 = rand.Next(, intw);
y1 = rand.Next(inth, map.Height - inth);
Thread.Sleep();
x2 = rand.Next(map.Width - intw, map.Width);
Thread.Sleep();
y2 = rand.Next(inth, map.Height - inth);
graph1.DrawLine(new Pen(b, 1f), x1, y1, x2, y2);
} for (int i = ; i < map.Width; i++)
{
for (int j = ; j < map.Height; j++)
{
Color cc = map.GetPixel(i, j);
map.SetPixel(i, j, GetColorByColor(cc));
}
} //生成图片
System.IO.MemoryStream ms = new System.IO.MemoryStream();
map.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "image/gif";
Response.BinaryWrite(ms.ToArray());
graph.Dispose();
graph1.Dispose();
map.Dispose();
} private Color GetColorByColor(Color c)
{
int[] cs = new int[] { c.R, c.G, c.B };
Random r = new Random();
for (int i = ; i < cs.Length; i++)
{
if (cs[i] < || cs[i] > )
continue;
int rn = r.Next(-, );
cs[i] += rn;
}
return Color.FromArgb(cs[], cs[], cs[]);
}
}
}

调用代码

<img style="height: 30px" src="codeimg.aspx" id="imgcode" onclick="GetCode()" />

 function GetCode() {
document.getElementById("imgcode").src = "codeimg.aspx?t=" + new Date().getTime();
}

  效果如下:

asp.net 加入验证码的更多相关文章

  1. ASP.NET MVC验证码演示(Ver2)

    前一版本<ASP.NET MVC验证码演示>http://www.cnblogs.com/insus/p/3622116.html,Insus.NET还是使用了Generic handle ...

  2. 【转载】Asp.Net生成图片验证码工具类

    在Asp.Net应用程序中,很多时候登陆页面以及其他安全重要操作的页面需要输入验证码,本文提供一个生成验证码图片的工具类,该工具类通过随机数生成验证码文本后,再通过C#中的图片处理类位图类,字体类,一 ...

  3. ASP.NET图形验证码的生成

    效果: 调用方法: int[] r = QAPI.VerifImage.RandomList();//取得随机数种子列 );//产生验证码字符 pictureBox1.Image = QAPI.Ver ...

  4. ASP.NET——生成验证码

    实现:随机生成四位数字的验证码,点击验证码可无刷新生成新的验证码,最后点击按钮进行检验 PS:本实例使用UpdatePanel实现无刷新. 前台代码: <asp:ScriptManager ID ...

  5. asp.net 编写验证码

    首先准备一个类来实现对验证码的绘制功能. createcode.cs using System; using System.Collections.Generic; using System.Linq ...

  6. ASP.NET MVC验证码演示

    我们在网站登录或理一个评论时,可以放置一个验证码(Captcha),可以为系统免去那些恶意刷新等功能. 今次Insus.NET在asp.net mvc应用程序实现与演示验证码的产生以及应用等 . 前天 ...

  7. ASP.NET mvc 验证码 (转)

    ASP.net 验证码(C#) MVC http://blog.163.com/xu_shuhao/blog/static/5257748720101022697309/ 网站添加验证码,主要为防止机 ...

  8. ASP.NET实现验证码图片

    新建一个checkcode.aspx文件,页面中不用写任何东西,在代码中,Page_Load中写入如下代码: string chkCode = string.Empty;        int ix, ...

  9. ASP.NET生成验证码

    首先,添加一个一般处理程序 注释很详细了,有不懂的欢迎评论 using System; using System.Collections.Generic; using System.Drawing; ...

  10. asp.net mvc 验证码

    效果图 验证码类 namespace QJW.VerifyCode { //用法: //public FileContentResult CreateValidate() //{ // Validat ...

随机推荐

  1. C# -- 把json字符串转为对象并读取各属性的值

    前面2种方法是不需要声明一个Json字符串的类型即可把Json字符串转换为Dictionary对象 而第3种方法则是声明一个Json字符串的强类型对象,然后反序列化为该对象的数据. List<, ...

  2. 【地图API】为何您的坐标不准?如何纠偏?

    原文:[地图API]为何您的坐标不准?如何纠偏? 摘要:各种坐标体系之间如何转换?到底有哪些坐标体系?什么是火星坐标?为什么我的坐标,在地图上显示会有偏移?本文详细解答以上问题.最后给出坐标拾取工具. ...

  3. redis修改的源代码zincrby,hincrby命令

    在项目中大量使用zincrby命令.究其原因是统计一些统计指标的日志值,和需要返回到顺序topn. 通常情况下,.调用一次的指示器zincrby(zincrby default:type 1 type ...

  4. Python编写网页爬虫爬取oj上的代码信息

    OJ升级,代码可能会丢失. 所以要事先备份. 一開始傻傻的复制粘贴, 后来实在不能忍, 得益于大潇的启示和聪神的原始代码, 网页爬虫走起! 已经有段时间没看Python, 这次网页爬虫的原始代码是 p ...

  5. linux内核源码目录(转)

    Linux用来支持各种体系结构的源代码包含大约4500个C语言程序,存放在270个左右的子目录下,总共大约包含200万行代码,大概占用58MB磁盘空间. 源代码所有在目录:/usr/src/linux ...

  6. lcc之内存分配

    现在感觉这本书有些地方没有说透,如果自己的理解能力与基础知识够强的话,理解起来还好,如果不行的话,某些地方理解起来会相当的头疼. 现在来说说内存管理.当初看这一章的时候很快就过去了,感觉很多地方很好理 ...

  7. c# 自定义数据类型

    定义引用类型用 class  ,值类型 用 struct ,涉及数据转换就用 上一篇的方法做 ,涉及 泛型就用 in  关键字 不用 in interface IContravariant<A& ...

  8. JavaScript语言基础知识11

    JavaScript字符的比较. 在接下来的学习内容的开始,我们先来看一下alert()此功能,它是一个消息框. OK,接下来正式介绍代码: <HTML> <HEAD> < ...

  9. Android学习之 WebView使用小结

    这段时间基于项目须要 在开发中与WebView的接触比較多,前段时间关于HTML5规范尘埃落定的消息出如今各大IT社区头版上,更有人说:HTML5将颠覆原生App开发 尽管我不太认同这一点 可是关于H ...

  10. Android自动化测试框架新书:交流

    大家觉得编写一本描述MonkeyRunner原理分析的书籍如何?估计大概10万字左右.内容大概分布如下: Monkey实现原理: 去描述运行在目标安卓机器的monkey是如何运行并处理MonkeyRu ...