通常生成一个图形验证码主要 有3个步骤:

(1)随机产生一个长度为N的随机字符串,N的值可由开发可由开发人员自行设置。该字符串可以包含数字、字母等。

(2)将随机生成的字符串创建成图片,并显示。

(3)保存验证码。 新建一个页面为default.aspx, 放置一个TextBox控件和一个Image控件,TextBox控件用于输入生成的字符串,Image控件用于显示字符串,它的图片就为

生成的图形验证码imageUrl=“/default.aspx”; default.aspx页面的源代码为:

using System;

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;

public partial class _Default : System.Web.UI.Page

{ protected void Page_Load(object sender, EventArgs e)

{ if (!IsPostBack)

{ string validateNum = CreateRandomNum(4);

CreateImage(validateNum); Session["ValidateNum"] = validateNum; }

}

//生产随机数

private string CreateRandomNum(int NumCount)

{ string allChar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,O,P,Q,R,S,T,U,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,m,n,o,p,q,s,t,u,w,x,y,z";

string[] allCharArray = allChar.Split(',');

//拆分成数组 string randomNum = ""; int temp = -1;

//记录上次随机数的数值,尽量避免产生几个相同的随机数

Random rand = new Random();

for (int i = 0; i < NumCount; i++) { if (temp != -1)

{

rand = new Random(i*temp*((int)DateTime.Now.Ticks));

}

int t = rand.Next(35);

if (temp == t)

{ return CreateRandomNum(NumCount);

}

temp = t;

randomNum += allCharArray[t];

}

return randomNum;

}

//生产图片

private void CreateImage(string validateNum)

{

   if (validateNum == null || validateNum.Trim() == string.Empty) return;

//生成BitMap图像

System.Drawing.Bitmap image = new System.Drawing.Bitmap(validateNum.Length*12+12,22);

Graphics g = Graphics.FromImage(image);

try {

 //生成随机生成器

Random random = new Random();

//清空图片背景

g.Clear(Color.White);

//画图片的背景噪音线

for (int 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,x2,y1,y2);

}

Font font = new System.Drawing.Font("Arial",12,(System.Drawing.FontStyle.Bold|System.Drawing.FontStyle.Italic));

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(validateNum,font,brush ,2,2);

//画图片的前景噪音点

for( int i=0;i<100;i++)

{ int x=random.Next(image.Width);

int y=random.Next(image.Height);

image.SetPixel(x,y,Color.FromArgb(random.Next()));

}

//画图片的边框线

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);

Response.ClearContent();

Response.ContentType="image/Gif";

Response.BinaryWrite(ms.ToArray());

}

finally { g.Dispose(); image.Dispose();

}

}

}

ASP.NET中如何生成图形验证码的更多相关文章

  1. 在React中随机生成图形验证码

    各个方法 在输入框中定义一个位置存放图形 完整代码 方便复制粘贴 import React, { Component } from 'react'; import styles from './lef ...

  2. PHP5 GD库生成图形验证码(汉字)

    PHP5 GD库生成图形验证码且带有汉字的实例分享. 1,利用GD库函数生成图片,并在图片上写指定字符imagecreatetruecolor 新建一个真彩色图像imagecolorallocate ...

  3. PHP5生成图形验证码(有汉字)

    利用PHP5中GD库生成图形验证码 类似于下面这样 1.利用GD库函数生成图片,并在图片上写指定字符 imagecreatetruecolor   新建一个真彩色图像      imagecolora ...

  4. java生成图形验证码

    效果图 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.image.Buf ...

  5. C#生成图形验证码

    先看效果: 再上代码 public class CaptchaHelper { private static Random rand = new Random(); private static in ...

  6. C#之asp.net 及MVC 生成动态验证码:

    C#之asp.net 及MVC 生成动态验证码: 1.生成验证码字符串 // 随机生成指定长度的验证码字符串private string RandomCode(int length) { string ...

  7. Asp.Net Core 生成图形验证码

    前几天有朋友问我怎么生成图片验证码,话不多说直接上代码. 支持.NET CORE开源.助力.NET Core社区发展. using System; using System.IO; using Sys ...

  8. asp.net中ashx生成验证码代码放在Linux(centos)主机上访问时无法显示问题

    最近有个项目加入了验证码功能,就从自己博客以前的代码中找到直接使用,直接访问验证码页面报错如下: 源代码:asp.net中使用一般处理程序生成验证码 Application Exception Sys ...

  9. python 生成图形验证码

    文章链接:https://mp.weixin.qq.com/s/LYUBRNallHcjnhJb1R3ZBg 日常在网站使用过程中经常遇到图形验证,今天准备自己做个图形验证码,这算是个简单的功能,也适 ...

随机推荐

  1. oracle技巧-持续更新

    1. 登录oracle数据库,执行select status from v$encryption_wallet,如果返回OPEN,表示钱夹已自动打开. 2.

  2. 百部BBC经典纪录片,附地址,需要的请抱走

  3. 如何为企业选择最理想的Linux服务器系统?

    [2013年10月12日 51CTO外电头条]什么样的Linux服务器最合适您的企业?简言之,它需要为员工带来工作所需的理想支持效果. 相对于成百上千种Linux桌面系统,Linux服务器系统的数量其 ...

  4. 【POJ1470】Closest Common Ancestors

    Description Write a program that takes as input a rooted tree and a list of pairs of vertices. For e ...

  5. 如何通过js使搜索关键词高亮

    给你推荐通过jquery来实现高亮关键词.jquery.textSearch-1.0.js代码: (function($){ $.fn.textSearch =function(str,options ...

  6. Weblogic8.1 的性能优化

    注:在下面做的介绍都是以Weblogic8.1为例的,其它版本的Weblogic可能会有些许不同. 1) 设置JAVA参数: a) 编辑Weblogic Server启动脚本文件: BEA_HOMEu ...

  7. IPCS资源

    ipcrm用法 ipcrm -M shmkey  移除用shmkey创建的共享内存段 ipcrm -m shmid    移除用shmid标识的共享内存段 ipcrm -Q msgkey  移除用ms ...

  8. ServiceStack.Redis常用操作 - 事务、并发锁

    一.事务 使用IRedisClient执行事务示例: using (IRedisClient RClient = prcm.GetClient()) { RClient.Add("key&q ...

  9. Unity3d fur真实毛发渲染

    放出效果图 使用的核心技术为曲面细分和置换贴图,Unity支持GPU的曲面细分,置换贴图为噪波,沿着法线拉伸即成为毛发.再随机减少最高点的高度产生毛刺的感觉 曲面细分之前有篇文章详细讲过 弄了前后ri ...

  10. 基于curl 的zabbix API调用

    1,认证并取得加密字段 curl -i -X POST -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0&q ...