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.PageWeb 窗体设计器生成的代码#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 SubEnd Class
做過,可以發給你。
[email protected]
http://blog.csdn.net/guanzhongs/archive/2005/12/29/564796.aspx
{
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;
}
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.PageWeb 窗体设计器生成的代码#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 SubEnd Class