using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.IO;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging; public partial class user_Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string checkCode = CreateRandomCode();
GetImgWithValidateCode(checkCode, , ,);
}
///<summary>
/// 生成随机字符串
///</summary>
///<param name="codeCount">字符数量</param>
///<returns>随机字符串</returns>
private string CreateRandomCode(int codeCount)
{
string allChar = "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,W,X,Y,Z";
string[] allCharArray = allChar.Split(',');
string randomCode = "";
int temp = -;
Random rand = new Random();
for (int i = ; i < codeCount; i++)
{
if (temp != -)
{
rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
}
int t = rand.Next();
if (temp == t)
{
return CreateRandomCode(codeCount);
}
temp = t;
randomCode += allCharArray[t];
}
return randomCode;
} ///<summary>
/// 创建验证码图片
///</summary>
///<param name="code">字符串</param>
///<param name="width">宽</param>
///<param name="height">高</param>
///<param name="fontSize">字号</param>
public void GetImgWithValidateCode(string code, int width, int height, int fontSize)
{
Color bgcolor = GetControllableColor();
Color color = GetControllableColor(); int charNum = code.Length;
Bitmap bitMap = null;
Graphics gph = null;
//创建内存流
MemoryStream memStream = new MemoryStream();
Random random = new Random(); //创建位图对象
bitMap = new Bitmap(width, height);
//根据上面创建的位图对象创建绘图图面
gph = Graphics.FromImage(bitMap);
//设定验证码图片背景色
gph.Clear(bgcolor);
//产生随机干扰线条
for (int i = ; i < ; i++)
{
Pen backPen = new Pen(color, );
int x = ;
int y = height / ;
int x2 = width;
int y2 = random.Next(height);
gph.DrawLine(backPen, x, y, x2, y2);
} SolidBrush sb = new SolidBrush(color);
PointF Cpoint1 = new PointF(, );
Random rnd1 = new Random();
int x1 = , y1 = ;
//通过循环,绘制每个字符,
for (int i = ; i < code.Length; i++)
{
x1 = rnd1.Next() + ((width - ) / code.Length) * i;
y1 = rnd1.Next(bitMap.Height / );
Cpoint1 = new PointF(x1, y1);
Font textFont = new Font("Arial", fontSize, FontStyle.Bold);//字体随机,字号大小30,加粗 //随机倾斜字符
Matrix transform = gph.Transform;
transform.Shear(Convert.ToSingle(rnd1.NextDouble() - 0.5), 0.001f);
gph.Transform = transform;
gph.DrawString(code.Substring(i, ), textFont, sb, Cpoint1);
gph.ResetTransform();
} //画图片的前景噪音点
for (int i = ; i < ; i++)
{
int x = random.Next(bitMap.Width);
int y = random.Next(bitMap.Height);
bitMap.SetPixel(x, y, Color.White);
}
//画图片的边框线
gph.DrawRectangle(new Pen(Color.Black, ), , , bitMap.Width - , bitMap.Height - );
try
{
bitMap.Save(memStream, ImageFormat.Gif);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
bitMap.Dispose();
System.Drawing.Image img = System.Drawing.Image.FromStream(memStream); gph.DrawImage(img, , , width, height);
//img.Save(@"D:\test.jpg", ImageFormat.Jpeg); //如果是asp.net 用下面的输出图片 System.IO.MemoryStream ms = new System.IO.MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
Response.ClearContent();
Response.ContentType = "image/Jpeg";
Response.BinaryWrite(ms.ToArray());
gph.Dispose();
img.Dispose();
} ///<summary>
/// 产生一种 R,G,B 均大于 colorBase 随机颜色,以确保颜色不会过深
///</summary>
///<param name="colorBase">The color base.</param>
///<returns>Color</returns>
public Color GetControllableColor(int colorBase)
{
Color color = Color.Black;
if (colorBase > )
{
return color;
}
Random random = new Random();
color = Color.FromArgb(random.Next() + colorBase, random.Next() + colorBase, random.Next() + colorBase);
return color;
}
}

验证码效果:

还有2种验证码请看我博客

http://www.cnblogs.com/webapi/p/5725576.html

http://www.cnblogs.com/webapi/p/5726498.html

Asp.Net验证码2的更多相关文章

  1. ASP.net 验证码(C#) MVC

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

  2. MVC的验证(模型注解和非侵入式脚本的结合使用) .Net中初探Redis .net通过代码发送邮件 Log4net (Log for .net) 使用GDI技术创建ASP.NET验证码 Razor模板引擎 (RazorEngine) .Net程序员应该掌握的正则表达式

    MVC的验证(模型注解和非侵入式脚本的结合使用)   @HtmlHrlper方式创建的标签,会自动生成一些属性,其中一些属性就是关于验证 如图示例: 模型注解 通过模型注解后,MVC的验证,包括前台客 ...

  3. 关于 ASP.NET 验证码

    Session["CheckCode"] 这个..不懂神马意思.. .创建一个用户控件 用户名:TextBox 密码: TextBox 验证码:TextBox 验证码图片 < ...

  4. ASP.NET 验证码 不同浏览器 不刷新问题

    具体为什么不刷新是缓存机制不同,验证码图片的src或ImageUrl的获取是来自一个文件,由于连接地址没变所以不同内核浏览器有的会认为源没有变,解决办法就是在连接后面加上一个随机参数如可以用JS的Ma ...

  5. asp.net验证码及怎么获取里面的数值(整合)

    一.ASP.Net的验证码的作用 对于一个预防攻击的web表单来讲,验证码通常是一个常见的措施.因为如果对于一些public区域的页面内容来讲,譬如一个登录表单,如果没有必要的安全措施,很可能遭到模拟 ...

  6. ASP.NET——验证码的制作

            我们在登陆站点,发表博客或者提交评论的时候,常常会遇到填写验证码这一项,当时感觉挺奇妙的样子,最终在牛腩新闻公布系统里接触到了,在这里小小的总结下.         用到的东东有三个: ...

  7. asp.net 验证码技术

    网站验证码是一种很常用的技术.下面我介绍下技术上是如何实现的. 验证码是一张图片.我们需要在前台代码中写一段<img>,src指向一张页面(ValidateImage.aspx). < ...

  8. asp.net验证码的编写

    很多时候我们在登录什么网站的时候,除了需要什么用户名和密码之外,有的还需要验证码那么在asp.net中这个验证码如何编写和设计,今天我就来给大家说一下: 首先创建一个页面名字随便起一个,我们这里叫做C ...

  9. asp.net验证码

    asp.net 生成验证码问题 .添加一个.ashx文件 <%@ WebHandler Language="C#" class="CheckCode" % ...

随机推荐

  1. javascript实现数据结构:线性表--线性链表(链式存储结构)

    上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ...

  2. python笔记1

    1.python中的语句块是用缩进表示,并不像C类语言中用{}表示语句块,还有就是语句块的开始貌似是用:表示,然后C类语言中()在python中用"空格"表示了,例如python中 ...

  3. 将HTMLCollection/NodeList/伪数组转换成数组

    这里把符合以下条件的对象称为伪数组(ArrayLike) 1,具有length属性 2,按索引方式存储数据 3,不具有数组的push,pop等方法 如 1,function内的arguments . ...

  4. vi/vim使用指北 ---- Learning the vi and Vim Editors 读书 笔记

    vi/vim作为liux系统下最强大,最流行的文本编辑器之一.边看<Learning the vi and vim Editor>边学习vim,顺便做写简单的笔记,供以后查询. 没看这本书 ...

  5. Codeforces 452E Three Strings(后缀自动机)

    上学期很认真地学了一些字符串的常用工具,各种 suffix structre,但是其实对后缀自动机这个部分是理解地不太透彻的,以致于看了师兄A这题的代码后,我完全看不懂,于是乎重新看回一些学习后缀自动 ...

  6. (4)opencv在android平台上实现 物体跟踪

    最近项目时间很紧,抓紧时间集中精力去研究android平台的opencv里的物体跟踪技术 其他几篇文章有时间再去完善吧 从网上找到了一些实例代码,我想采取的学习方法是研究实例代码和看教程相结合,教程是 ...

  7. Linux客户/服务器程序设计范式1——并发服务器(多进程)

    引言 本文会写一个并发服务器(concurrent server)程序,它为每个客户请求fork出一个子进程. 注意 1. 信号处理问题 对于相同信号,按信号的先后顺序依次处理.可能会产生的问题是,正 ...

  8. 10个最佳的网站和App开发工具

    这个世界充满了创新,开发的激情和决心是实现更高目标的关键因素.在网站开发中,毫无疑问,工具和可用的在线网页和 app 设计资源,发挥了重要的作用. 下面我们将带来一些网站和 app 的最佳工具.   ...

  9. iOS开发--项目内存优化

    在用非ARC模式编写iOS程序的时候,造成程序内存泄露在所难免,后期我们一般会进行内存优化.自己比较常用的内存优化方法有两种 1.Analyze,静态分析内存泄露的方法.很简单,在Xcode菜单栏中点 ...

  10. wordpress学习二:源码目录结构和启动流程

    wordpress安装后的文件目录如下: 其中的主要目录和文件用途介绍如下: wp-admin:用于进行博客后台设置的功能目录 wp-content: wordpress的 主题,插件和本地化的存储目 ...