谁能给我一个.NET C#的验证码程序源码

loveksmy 2008-06-20 11:17:22
谁能给我一个.NET C#的验证码程序源码

要求是生成图片的

顺便也把使用方法说一下吧

谢谢咯
...全文
206 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
carkiller 2008-06-20
  • 打赏
  • 举报
回复
后台:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Drawing;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.GenImg(this.GenCode(4));
}

}
//产生随机字符串
private string GenCode(int num)
{
string[] source ={"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","V","W","X","Y","Z"};
string code = "";
Random rd = new Random();
for (int i = 0; i < num; i++)
{
code += source[rd.Next(0, source.Length)];
}
return code;
}

//生成图片
private void GenImg(string code)
{
Bitmap myPalette = new Bitmap(60, 20);//定义一个画板

Graphics gh = Graphics.FromImage(myPalette);//在画板上定义绘图的实例

Rectangle rc = new Rectangle(0, 0, 60, 20);//定义一个矩形

gh.FillRectangle(new SolidBrush(Color.Blue), rc);//填充矩形
gh.DrawString(code, new Font("宋体", 16), new SolidBrush(Color.White), rc);//在矩形内画出字符串

myPalette.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);//将图片显示出来

Session["ValidateCode"] = code;//将字符串保存到Session中,以便需要时进行验证

gh.Dispose();
myPalette.Dispose();
}

}


HTML文件:

加入一个HTML控件Image即可

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>
<img src="Default2.aspx" />


liujb526 2008-06-20
  • 打赏
  • 举报
回复
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DrawImgValCode(GetRandString());
}
}
liujb526 2008-06-20
  • 打赏
  • 举报
回复
/// <summary>
/// 生成随机六位数字,字母合成字符串
/// </summary>
/// <returns></returns>
private string GetRandString()
{
string schar = "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[] codearr = schar.Split(',');

string sNum = "";
Random random = new Random();
for (int i = 1; i <= 6; i++)
{
int iNum = 0;
while ((iNum = Convert.ToInt32(codearr.Length * random.NextDouble())) == codearr.Length)
{
iNum = Convert.ToInt32(codearr.Length * random.NextDouble());
}
sNum += codearr[iNum];
}
return sNum;
}
liujb526 2008-06-20
  • 打赏
  • 举报
回复
private void DrawImgValCode(string imgValCode)
{
if (imgValCode == null || imgValCode.Trim() == "")
return;

HttpCookie cook = new HttpCookie("imgValCode", imgValCode);
Response.Cookies.Add(cook);

System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((imgValCode.Length * 24.0)), 30);
Graphics g = Graphics.FromImage(image);

try
{
//生成随机生成器
Random random = new Random();

//清空图片背景色
g.Clear(Color.White);

//画图片的背景噪音线
for (int i = 0; i < 80; 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, y1, x2, y2);
}

Font font = new System.Drawing.Font("Arial", 15, (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.MediumBlue, Color.FromArgb(random.Next()), 1.3f, true);
g.DrawString(imgValCode, font, brush, 20, 3);

//画图片的前景噪音点
for (int i = 0; i < 500; 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();
}
}
懒牛科技 2008-06-20
  • 打赏
  • 举报
回复
http://www.cnblogs.com/mqcan/archive/2008/03/24/1119313.html

62,254

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧