急求图形验证码源码

fly_rain 2005-09-10 09:29:02
原来一直没这方面的知识,那个大侠教教我啊~~~~~(我对图形图像处理基础的知识为0)。有下载的地方提供一个也可以,谢谢了!
...全文
332 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wlei9802 2006-07-01
  • 打赏
  • 举报
回复
http://bbs.chinaworkroom.com
cime63 2006-06-26
  • 打赏
  • 举报
回复
ynkg
guishuanglin 2006-06-26
  • 打赏
  • 举报
回复
收藏。。
sky 2006-02-21
  • 打赏
  • 举报
回复
ruixp 2006-01-06
  • 打赏
  • 举报
回复
Imports System
Imports System.Drawing.Drawing2D
Imports System.Drawing.imaging
Imports System.Drawing
Imports System.Web.UI
Imports System.IO
Namespace ValidateNamespace Validate
Public Class CreatValidateNumberClass CreatValidateNumber
'生成验证码
Public Function CreatValidateNumber()Function CreatValidateNumber(ByVal length As Integer) As String
Dim randNumber() As Integer = New Integer(length) {}
Dim ValidateNumber() As Integer = New Integer(length) {}
Dim ValidateNumberStr As String = ""
Dim seekseek As Integer = CInt(DateTime.Now.Second)
Dim seekrand As Random = New Random(seekseek)
Dim beginseek = Int(seekrand.Next(0, Int32.MaxValue - length * 10000))
Dim seeks() As Integer = New Integer(length) {}
Dim i As Integer
'生成起始序列值
For i = 0 To length - 1
beginseek += 10000
seeks(i) = beginseek
Next
'生成随机数字
For i = 0 To length - 1
Dim rand As Random = New Random(seeks(i))
Dim pownum As Integer = 1 * Int(Math.Pow(10, length))
randNumber(i) = rand.Next(pownum, Int32.MaxValue)
Next
'抽取随机数字
For i = 0 To length - 1
Dim numstr As String = randNumber(i).ToString
Dim numlength As Integer = numstr.Length
Dim rand As New Random
Dim numPosition As Integer = rand.Next(0, numlength - 1)
ValidateNumber(i) = Int32.Parse(numstr.Substring(numPosition, 1))
Next
'生成验证码
For i = 0 To length - 1
ValidateNumberStr += ValidateNumber(i).ToString
Next
Return ValidateNumberStr
End Function
'创建验证码图片
Public Sub CreatevalidateGraphic()Sub CreatevalidateGraphic(ByVal page As Page, ByVal validatenum As String)
Dim image As Bitmap = New Bitmap(CInt(Math.Ceiling(validatenum.Length * 12.5)), 22)
Dim g As Graphics = Graphics.FromImage(image)
Try
'生成随机生成器
Dim random As New Random
'清空图片背景色
g.Clear(Color.White)
'画图片的干扰线
Dim i As Integer
For i = 0 To 24
Dim x1 As Integer = random.Next(image.Width)
Dim x2 As Integer = random.Next(image.Width)
Dim y1 As Integer = random.Next(image.Height)
Dim y2 As Integer = random.Next(image.Height)
g.DrawLine(New Pen(Color.Silver), x1, y1, x2, y2)
Next
'画验证码
Dim font As Font = New Font("Arial", 12, (FontStyle.Bold And FontStyle.Italic))
Dim brush As LinearGradientBrush = New LinearGradientBrush(New Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2F, True)
g.DrawString(validatenum, font, brush, 3, 2)
'画前景干扰点
For i = 0 To 24
Dim x As Integer = random.Next(image.Width)
Dim y As Integer = random.Next(image.Height)
image.SetPixel(x, y, Color.FromArgb(random.Next()))
Next
'画图片的边框线
g.DrawRectangle(New Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1)
'保存图片
Dim stream As New MemoryStream
image.Save(stream, ImageFormat.Jpeg)
'输出图片
page.Response.Clear()
page.Response.ContentType = "image/jpeg"
page.Response.BinaryWrite(stream.ToArray())
Catch ex As Exception
Finally
g.Dispose()
image.Dispose()

End Try
End Sub


End Class
End Namespace



下面是这个类的引用一个小例子

HTML部份:


DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<title>WebForm1title>
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<FONT face="宋体">FONT>
form>
body>
HTML>程序部份:
Public Class WebForm1Class WebForm1
Inherits System.Web.UI.Page

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

'该调用是 Web 窗体设计器所必需的。
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()Sub InitializeComponent()

End Sub

'注意: 以下占位符声明是 Web 窗体设计器所必需的。
'不要删除或移动它。
Private designerPlaceholderDeclaration As System.Object

Private Sub Page_Init()Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
'不要使用代码编辑器修改它。
InitializeComponent()
End Sub

#End Region
Public validates As New Validate.CreatValidateNumber
Public vali As String
Private Sub Page_Load()Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码

vali = validates.CreatValidateNumber(5)
'validate.CreatevalidateGraphic(Me, vali)
End Sub

End Class
ChengKing 2005-12-30
  • 打赏
  • 举报
回复
http://blog.csdn.net/chengking/archive/2005/10/07/496615.aspx
c11_11_11 2005-12-30
  • 打赏
  • 举报
回复
public byte[] GenerateVerifyImage(int nLen,ref string strKey)
{
int nBmpWidth = 13*nLen+5;
int nBmpHeight = 25;
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(nBmpWidth,nBmpHeight);

// 1. 生成随机背景颜色
int nRed,nGreen,nBlue; // 背景的三元色
System.Random rd = new Random((int)System.DateTime.Now.Ticks);
nRed = rd.Next(255)%128+128;
nGreen = rd.Next(255)%128+128;
nBlue = rd.Next(255)%128+128;

// 2. 填充位图背景
System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(bmp);
graph.FillRectangle(new SolidBrush(System.Drawing.Color.FromArgb(nRed,nGreen,nBlue))
,0
,0
,nBmpWidth
,nBmpHeight);


// 3. 绘制干扰线条,采用比背景略深一些的颜色
int nLines = 3;
System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.Color.FromArgb(nRed-17,nGreen-17,nBlue-17),2);
for(int a =0;a< nLines;a++)
{
int x1 = rd.Next() % nBmpWidth;
int y1 = rd.Next() % nBmpHeight;
int x2 = rd.Next() % nBmpWidth;
int y2 = rd.Next() % nBmpHeight;
graph.DrawLine(pen,x1,y1,x2,y2);
}

// 采用的字符集,可以随即拓展,并可以控制字符出现的几率
string strCode = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

// 4. 循环取得字符,并绘制
string strResult = "";
for(int i=0;i<nLen;i++)
{
int x = (i*13 + rd.Next(3));
int y = rd.Next(4) + 1;

// 确定字体
System.Drawing.Font font = new System.Drawing.Font("Courier New",
12 + rd.Next()%4,
System.Drawing.FontStyle.Bold);
char c = strCode[rd.Next(strCode.Length)]; // 随机获取字符
strResult += c.ToString();

// 绘制字符
graph.DrawString(c.ToString(),
font,
new SolidBrush(System.Drawing.Color.FromArgb(nRed-60+y*3,nGreen-60+y*3,nBlue-40+y*3)),
x,
y);
}

// 5. 输出字节流
System.IO.MemoryStream bstream = new System.IO.MemoryStream();
bmp.Save(bstream,System.Drawing.Imaging.ImageFormat.Jpeg);
bmp.Dispose();
graph.Dispose();

strKey = strResult;
byte[] byteReturn = bstream.ToArray();
bstream.Close();

return byteReturn;
}

singlepine 2005-12-30
  • 打赏
  • 举报
回复
http://singlepine.cnblogs.com/articles/264894.html
guanzhongs 2005-12-30
  • 打赏
  • 举报
回复
ASP.NET下的实现,可以参考:
http://blog.csdn.net/guanzhongs/archive/2005/12/29/564796.aspx
新鲜鱼排 2005-09-10
  • 打赏
  • 举报
回复
類似于csdn的數字驗證么??
做過,可以發給你。
dutguoyi@126.com

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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