45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:C#图片验证码介绍

C#图片验证码介绍

2016-09-03 10:53:10 来源:www.45fan.com 【

C#图片验证码介绍

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

using System.IO;

namespace PR.t_img

{

/// <summary>

/// CreateImg 的摘要说明。

/// </summary>

public class CreateImg : System.Web.UI.Page

{

private void Page_Load(object sender, System.EventArgs e)

{

// 在此处放置用户代码以初始化页面

string vnum;

vnum = GetByRndNum(6);

Response.ClearContent(); //需要输出图象信息 要修改HTTP头

Response.ContentType="image/Png";

Response.BinaryWrite(GetByValidateCode(vnum).ToArray());

}

public MemoryStream GetByValidateCode(string VNum)//返回内存流

{

Bitmap Img = null;

Graphics g = null ;

MemoryStream ms = null ;

Random random = new Random();

int gheight = VNum.Length*12;

Img = new Bitmap(gheight,24);

g = Graphics.FromImage(Img);

Font f = new Font("Arial", 12, FontStyle.Bold);

g.Clear (GetByRandColor(204,255) );//设定背景色

Pen blackPen = new Pen(Color.Ivory ,3);

for (int i=0;i<155;i++)// 随机产生干扰线,使图象中的认证码不易被其它程序探测到

{

int x = random.Next (gheight);

int y = random.Next (20);

int xl = random.Next (6);

int yl = random.Next (2);

g.DrawLine (blackPen,x,y,x+xl,y+yl);

}

SolidBrush s = new SolidBrush(Color.SandyBrown);

g.DrawString(VNum,f,s,3,3);

ms=new MemoryStream();

Img.Save(ms,System.Drawing.Imaging.ImageFormat.Png);

g.Dispose();

Img.Dispose();

return ms;

}

//-----------------给定范围获得随机颜色------------

Color GetByRandColor(int fc,int bc)

{

Random random = new Random();

if(fc>255) fc=255;

if(bc>255) bc=255;

//if(ac>255) ac=255;

int r=fc+random.Next (bc-fc);

int g=fc+random.Next (bc-fc);

int b=fc+random.Next (bc-bc);

Color rs = Color.FromArgb (r,g,b);

return rs;

}

//-----------------------取随机产生的认证码(6位数字)

public string GetByRndNum(int VcodeNum)

{

string Vchar = "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[] VcArray = Vchar.Split(',') ;

string VNum = "" ;

int temp = -1 ;//记录上次随机数值,尽量避免生产几个一样的随机数

//采用一个简单的算法以保证生成随机数的不同

Random rand =new Random();

for ( int i = 1 ; i < VcodeNum+1 ; i++ )

{

if ( temp != -1)

{

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

}

int t = rand.Next(35) ;

if (temp != -1 && temp == t)

{

return GetByRndNum( VcodeNum );

}

temp = t ;

VNum += VcArray[t];

}

return VNum ;

}

#region Web 窗体设计器生成的代码

override protected void OnInit(EventArgs e)

{

//

// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。

//

InitializeComponent();

base.OnInit(e);

}

/// <summary>

/// 设计器支持所需的方法 - 不要使用代码编辑器修改

/// 此方法的内容。

/// </summary>

private void InitializeComponent()

{

this.Load += new System.EventHandler(this.Page_Load);

}

#endregion

}

}

 

本文地址:http://www.45fan.com/a/question/71689.html
Tags: 验证 图片 using
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部