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;
using System.Drawing.Text; public partial class user_Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
CreateImage(GetCheckCode(VCODE_LENGTH));
} protected static int VCODE_LENGTH = ; //产生图片 宽度:_WIDTH, 高度:_HEIGHT
private static readonly int _WIDTH = , _HEIGHT = ;
//字体集
private static readonly string[] _FONT_FAMIly = { "Broadway", "Arial", "Arial Black", "Courier New", "Showcard Gothic", "Algerian", "Wide Latin", "Bernard MT Condensed", "Cooper Black" };
//字体大小集
private static readonly int[] _FONT_SIZE = { , , };
//前景字体颜色集
private static readonly Color[] _COLOR_FACE = { Color.FromArgb(, , ), Color.FromArgb(, , ), Color.FromArgb(, , ), Color.FromArgb(, , ) };
//背景颜色集
private static readonly Color[] _COLOR_BACKGROUND = { Color.FromArgb(, , ), Color.FromArgb(, , ), Color.FromArgb(, , ), Color.FromArgb(, , ) };
//文本布局信息
private static StringFormat _DL_FORMAT = new StringFormat(StringFormatFlags.NoClip);
//左右旋转角度
private static readonly int _ANGLE = ; private string GetCheckCode(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 GetCheckCode(codeCount);
}
temp = t;
randomCode += allCharArray[t];
}
return randomCode;
} private void CreateImage(string code)
{
_DL_FORMAT.Alignment = StringAlignment.Center;
_DL_FORMAT.LineAlignment = StringAlignment.Center; long tick = DateTime.Now.Ticks;
Random Rnd = new Random((int)(tick & 0xffffffffL) | (int)(tick >> )); using (Bitmap _img = new Bitmap(_WIDTH, _HEIGHT))
{
using (Graphics g = Graphics.FromImage(_img))
{
g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; Point dot = new Point(, ); // 定义一个无干扰线区间和一个起始位置
int nor = Rnd.Next(), rsta = Rnd.Next();
// 绘制干扰正弦曲线 M:曲线平折度, D:Y轴常量 V:X轴焦距
int M = Rnd.Next() + , D = Rnd.Next() + , V = Rnd.Next() + ; int ColorIndex = Rnd.Next(); float Px_x = 0.0F;
float Px_y = Convert.ToSingle(M * Math.Sin(V * Px_x * Math.PI / ) + D);
float Py_x, Py_y; //填充背景
g.Clear(_COLOR_BACKGROUND[Rnd.Next()]); //前景刷子 //背景刷子
using (Brush _BrushFace = new SolidBrush(_COLOR_FACE[ColorIndex]))
{
#region 绘制正弦线
for (int i = ; i < ; i++)
{
//初始化y点
Py_x = Px_x + ;
Py_y = Convert.ToSingle(M * Math.Sin(V * Py_x * Math.PI / ) + D); //确定线条颜色
if (rsta >= i || i > (rsta + nor))
//初始化画笔
using (Pen _pen = new Pen(_BrushFace, 1.5f))
{
//绘制线条
g.DrawLine(_pen, Px_x, Px_y, Py_x, Py_y);
} //交替x,y坐标点
Px_x = Py_x;
Px_y = Py_y;
}
#endregion //初始化光标的开始位置
g.TranslateTransform(-, ); #region 绘制校验码字符串
for (int i = ; i < code.Length; i++)
{
//随机旋转 角度
int angle = Rnd.Next(-_ANGLE, _ANGLE);
//移动光标到指定位置
g.TranslateTransform(dot.X, dot.Y);
//旋转
g.RotateTransform(angle); //初始化字体
using (Font _font = new Font(_FONT_FAMIly[Rnd.Next(, )], _FONT_SIZE[Rnd.Next(, )]))
{
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(, , _WIDTH, _HEIGHT), _COLOR_FACE[ColorIndex], Color.Orange, 1.2f, true); //绘制
g.DrawString(code[i].ToString(), _font, brush, , , _DL_FORMAT);
}
//反转
g.RotateTransform(-angle);
//重新定位光标位置
g.TranslateTransform(-, -dot.Y);
}
#endregion }
} using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
Response.ContentType = "Image/PNG";
Response.Clear();
Response.BufferOutput = true;
_img.Save(ms, ImageFormat.Png);
ms.Flush();
Response.BinaryWrite(ms.GetBuffer());
Response.End();
}
} }
}

验证码效果:

还有2种验证码:

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

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

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

  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验证码2

    using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System. ...

  4. 关于 ASP.NET 验证码

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

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

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

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

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

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

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

  8. asp.net 验证码技术

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

  9. asp.net验证码的编写

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

  10. asp.net验证码

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

随机推荐

  1. linux权威指南 简记

    /proc 目录,linxu系统以文件形式存放进程信息,这是一个虚拟的文件系统,不占有任何磁盘空间,当读取该文件系统时,系统内核会拦截动作,并动态产生文件与目录的内容 查看该文件夹,会发现很多已数字命 ...

  2. java 分割split

    1.如果用“.”作为分隔的话,必须是如下写法:String.split("\\."),这样才能正确的分隔开,不能用String.split(".");2.如果用 ...

  3. POJ 3177 Redundant Paths(Tarjan)

    题目链接 题意 : 一个无向连通图,最少添加几条边使其成为一个边连通分量 . 思路 :先用Tarjan缩点,缩点之后的图一定是一棵树,边连通度为1.然后找到所有叶子节点,即度数为1的节点的个数leaf ...

  4. ExtJs布局之Card

    <!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...

  5. BZOJ 1015: [JSOI2008]星球大战starwar 并查集

    1015: [JSOI2008]星球大战starwar Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝 ...

  6. C# Socket 入门3 UPD(转)

    今天来写一个UPD 1.服务端: using System; using System.Collections.Generic; using System.Text; using System.Net ...

  7. 华为上机:Tom的生日礼物

    Tom的生日礼物 描述: 四月一日快到了,Tom想了个愚人的好办法——送礼物.嘿嘿,不要想的太好,这礼物可没那么简单,Tom为了愚人,准备了一堆盒子,其中有一个盒子里面装了礼物.盒子里面可以再放零个或 ...

  8. 算法导论:Trie字典树

    1. 概述 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树. Trie一词来自retrieve,发音为/tr ...

  9. 545E. Paths and Trees

    题目链接 题意:给定一个无向图和一个点u,找出若干条边组成一个子图,要求这个子图中u到其他个点的最短距离与在原图中的相等,并且要求子图所有边的权重之和最小,求出最小值并输出子图的边号. 思路:先求一遍 ...

  10. 使用XShell工具密钥认证登录Linux系统

    如果你是一名Linux运维,那么Linux服务器的系统安全问题,可能是你要考虑的,而系统登录方式有两种,密码和密钥.哪一种更加安全呢? 无疑是后者! 这里我为大家分享用Xshell利器使用密钥的方式登 ...