建一個(gè)YanzhenCard.aspx文件
成都創(chuàng)新互聯(lián)公司是一家以網(wǎng)站建設(shè)公司、網(wǎng)頁(yè)設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、成都網(wǎng)站推廣、小程序App開(kāi)發(fā)等移動(dòng)開(kāi)發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為成都發(fā)電機(jī)租賃等眾行業(yè)中小客戶(hù)提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開(kāi)發(fā)服務(wù)。
保留%@ Page Language="VB" AutoEventWireup="false" CodeFile="YanzhenCard.aspx.vb" Inherits="YanzhenCard" %,其余刪除
如下是代碼:
Imports System.IO
Imports System.Drawing
Partial Class YanzhenCard
Inherits System.Web.UI.Page
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
Dim VNum As String = GenerateRandom(4)
Session("VNum") = VNum
ValidateCode(VNum)
End If
End Sub
Private Sub ValidateCode(ByVal VNum As String)
Dim Gheight As Integer = CType((VNum.Length * 15), Integer)
Dim Img As Bitmap = New Bitmap(Gheight, 20) 'Bitmap是用于處理由像素?cái)?shù)據(jù)定義的圖像
Dim g As Graphics = Graphics.FromImage(Img) 'Graphics.FromImage 從指定的Image創(chuàng)建新的Graphics
g.DrawString(VNum, New Font("Arial", 12), New SolidBrush(Color.Red), 5, 0) 'g.DrawString()在指定位置并且用指定的Brush和Font對(duì)象繪制指定的文本字符串。
Dim ms As MemoryStream = New MemoryStream '創(chuàng)建其支持存儲(chǔ)區(qū)為內(nèi)存的流。
Img.Save(ms, System.Drawing.Imaging.ImageFormat.Png)
Response.ClearContent()
Response.ContentType = "image/PNG"
Response.BinaryWrite(ms.ToArray)
Response.Write(VNum)
g.Dispose()
Img.Dispose()
Response.End()
End Sub
Private Shared constant As Char() = {"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"}
Public Shared Function GenerateRandom(ByVal Length As Integer) As String
Dim newRandom As System.Text.StringBuilder = New System.Text.StringBuilder(26)
Dim rd As Random = New Random
Dim i As Integer = 0
While i Length
newRandom.Append(constant(rd.Next(26)))
System.Math.Min(System.Threading.Interlocked.Increment(i), i - 1)
End While
Return newRandom.ToString
End Function
End Class
調(diào)用方法:asp:ImageButton ID="Yanzhengma_Card" runat="server" ImageUrl="YanzhenCard.aspx" Height="20px" Width="75px" BorderColor="#6699cc" BorderStyle="Solid" BorderWidth="1px" /
我會(huì)C#.net的,不過(guò)邏輯應(yīng)該一樣,給你看下吧第一步: 創(chuàng)建生成隨機(jī)字符的方法private string CreateValidate(int count)
{
//定義驗(yàn)證碼中所有的字符
string allchar = "1,2,3,4,5,6,7,8,9,0,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";
//將驗(yàn)證碼中所有的字符保存在一個(gè)字符串?dāng)?shù)組中
string[] allchararray = allchar.Split(',');
//初始化一個(gè)隨機(jī)數(shù)
string randomcode = "";
int temp = -1;
//生成一個(gè)隨機(jī)對(duì)象
Random rand = new Random();
//根據(jù)驗(yàn)證碼的位數(shù)循環(huán)
for (int i = 0; i count; i++)
{
//主要是防止生成相同的驗(yàn)證碼
if (temp != -1)
{
//加入時(shí)間的刻度
rand = new Random(i * temp * ((int)DateTime.Now.Ticks));
}
int t = rand.Next(35);
if (temp == t)
{
//相等的話(huà)重新生成
return CreateValidate(count);
}
temp = t;
randomcode += allchararray[t];
}
//在Session中保存隨機(jī)驗(yàn)證碼
Session["Valid"] = randomcode;
//返回生成的隨機(jī)字符
return randomcode;
}第二步:創(chuàng)建生成圖片的方法:private void CreateImageM(string validateCode)
{
//圖像的寬度-與驗(yàn)證碼的長(zhǎng)度成一定比例
int iwidth = (int)(validateCode.Length * 11.5);
//創(chuàng)建一個(gè)長(zhǎng)20,寬iwidth的圖像對(duì)象
System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20);
//創(chuàng)建一個(gè)新繪圖對(duì)象
Graphics g = Graphics.FromImage(image);
//繪圖用的字體和字號(hào)
Font f = new System.Drawing.Font("Arial", 10, System.Drawing.FontStyle.Bold);
//繪圖用的刷子大小
Brush b = new System.Drawing.SolidBrush(Color.White);
//清除背景色,并以深橄欖綠的顏色填充
g.Clear(Color.DarkOliveGreen);
//格式化刷子屬性-用指定的刷子、顏色等在指定的范圍內(nèi)畫(huà)圖
g.DrawString(validateCode, f, b, 3, 3);
//創(chuàng)建鉛筆對(duì)象
Pen blackPen = new Pen(Color.Black, 0);
//創(chuàng)建隨機(jī)對(duì)象
Random rand = new Random();
//隨機(jī)畫(huà)線(xiàn)
for (int i = 0; i 5; i++)
{
int y = rand.Next(image.Height);
g.DrawLine(blackPen, 0, y, image.Width, y);
}
//輸出繪圖
System.IO.MemoryStream ms = new System.IO.MemoryStream();
//將圖像保存到指定的流
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
Response.ClearContent();
//配置輸出類(lèi)型
Response.ContentType = "image/Jpeg";
//輸出內(nèi)容
Response.BinaryWrite(ms.ToArray());
//清空不需要的資源
g.Dispose();
image.Dispose();
}第三步:在page_Load事件中調(diào)用CreateImageM(CreateValidate(4));第四步:判斷服務(wù)器端的驗(yàn)證碼是否與用戶(hù)輸入的相同protected void Button1_Click(object sender, EventArgs e)
{
//判斷服務(wù)器端的驗(yàn)證碼是否與用戶(hù)輸入的相同
if (TextBox1.Text == Session["Valid"].ToString())
{
//相同則提示歡迎信息
Response.Write("script language='javascript'alert('歡迎光臨')/script");
}
else
{
//不相同則提示錯(cuò)誤信息
Response.Write("script language='javascript'alert('對(duì)不起,驗(yàn)證碼錯(cuò)誤')/script");
}
}
實(shí)現(xiàn)過(guò)程,在需要調(diào)用的頁(yè)面使用image控件調(diào)用驗(yàn)證碼生成的頁(yè)面,驗(yàn)證碼生成的頁(yè)面生成驗(yàn)證圖片且將驗(yàn)證信息保存至Session中,調(diào)用頁(yè)面中通過(guò)Session判斷用戶(hù)是否輸入正確。道理是這樣,以下看代碼:
生成驗(yàn)證碼頁(yè)面:
gif.ASPx
%@importnamespace="System"%
%@importnamespace="System.io"%
%@importnamespace="System.Drawing"%
%@importnamespace="System.Drawing.Imaging"%
scriptlanguage="VB"runat="server"
SubPage_Load(ByValSenderAsObject,ByValeAsEventArgs)
'RndNum為生成隨機(jī)碼的函數(shù),
DimVNumAsString=RndNum(4)'該值為生成驗(yàn)證碼的位數(shù)
Session("VNum")=VNum'讀取Session
ValidateCode(VNum) '根據(jù)Session生成圖片
EndSub
'--------------------------------------------
'生成圖象驗(yàn)證碼函數(shù)
SubValidateCode(ByValVNum)
DimImgAsSystem.Drawing.Bitmap
DimgAsGraphics
DimmsAsMemoryStream
DimgheightAsInteger=Int(Len(VNum)*14)
'gheight為圖片寬度,根據(jù)字符長(zhǎng)度自動(dòng)更改圖片寬度
Img=NewBitmap(gheight,24)
g=Graphics.FromImage(Img)
g.DrawString(VNum,(NewFont("Arial",12)),(NewSolidBrush(Color.Red)),3,3)'在矩形內(nèi)繪制字串(字串,字體,畫(huà)筆顏色,左上x(chóng).左上y)
ms=NewMemoryStream()
Img.Save(ms,ImageFormat.Png)
Response.ClearContent()'需要輸出圖象信息要修改HTTP頭
Response.ContentType="image/Png"
Response.BinaryWrite(ms.ToArray())
g.Dispose()
Img.Dispose()
Response.End()
EndSub
'--------------------------------------------
'函數(shù)名稱(chēng):RndNum
'函數(shù)參數(shù):VCodeNum--設(shè)定返回隨機(jī)字符串的位數(shù)
'函數(shù)功能:產(chǎn)生數(shù)字和字符混合的隨機(jī)字符串
FunctionRndNum(ByValVcodeNum)
DimVcharAsString="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F(xiàn),G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z"'需要使用中文驗(yàn)證,可以修改這里和ValidateCode函數(shù)中的字體
DimVcArray()AsString=Split(Vchar,",")'將字符串生成數(shù)組
DimVNumAsString=""
DimiAsByte
Fori=1ToVcodeNum
Randomize()
VNum=VNumVcArray(Int(35*Rnd()))'數(shù)組一般從0開(kāi)始讀取,所以這里為35*Rnd
Next
ReturnVNum
EndFunction
/script
調(diào)用頁(yè)面:
demo.ASPx
scriptlanguage="VB"Runat="Server"
SubPage_Load(Senderasobject,easeventargs)
dimVNumasstring=Session("VNum")
Session.Abandon()
ViewState("VNum")=VNum
EndSub
'下面的事件代碼是用來(lái)測(cè)試驗(yàn)證碼
SubbtnSubmit_click(senderasobject,easeventargs)
'判斷輸入的驗(yàn)證碼與所給是否相同
IftxtValidateCode.Text=CStr(ViewState("VNum"))Then
ensonShow.text="fontcolor='red'提示:驗(yàn)證通過(guò)/font"
Else
ensonShow.text="所填寫(xiě)的驗(yàn)證碼與所給的不符"
EndIf
EndSub
/script
html
body
formrunat="server"
divalign="center"
tablewidth="750"
tr
tdvalign="middle"驗(yàn)證碼:/td
!--調(diào)用驗(yàn)證圖片生成頁(yè)---
tdvalign="top"asp:Imageid="Image1"runat="server"ImageUrl="gif.aspx"http://td
/tr
tr
tdvalign="top"輸入驗(yàn)證碼:/td
tdvalign="top"asp:textboxID="txtValidateCode"runat="server"TextMode="SingleLine"/fontcolor="#FF0000"size="2"*區(qū)分大小寫(xiě)/font/td
/tr
tr
tdcolspan="2"valign="top"align="center"asp:buttonID="btnSubmit"runat="server"Text="驗(yàn)證"onclick="btnSubmit_click"/
asp:labelID="ensonShow"runat="server"/
/td
/tr
/table
/div
/form
/body
/html
新建工程,添加一個(gè)picturebox,一個(gè)textbox,兩個(gè)command button
Dim vCode As String
Private Sub Command1_Click()
drawvc
End Sub
Private Sub drawvc() '顯示校驗(yàn)碼
Dim i, vc, px, py As Long
Dim r, g, b As Byte
Randomize '初始化隨機(jī)種子
'生成隨機(jī)校驗(yàn)碼
vc = CLng(8999 * Rnd + 1000)
vCode = vc
'顯示校驗(yàn)碼
Picture1.Cls
Picture1.Print vc
'添加噪點(diǎn)(防止自動(dòng)圖像識(shí)別)
For i = 0 To 2000 '畫(huà)2000個(gè)噪點(diǎn)
'畫(huà)點(diǎn)隨機(jī)位置
px = CLng(Picture1.Width * Rnd)
py = CLng(Picture1.Height * Rnd)
'畫(huà)點(diǎn)隨機(jī)顏色
r = CByte(255 * Rnd)
g = CByte(255 * Rnd)
b = CByte(255 * Rnd)
Picture1.Line (px, py)-(px + 1, py + 1), RGB(r, g, b)
Next
End Sub
Private Sub Command2_Click()
If Text1.Text = vCode Then
MsgBox ("正確")
Else
MsgBox ("錯(cuò)誤")
drawvc
End If
End Sub
Private Sub Form_Load()
Picture1.FontSize = 12
Picture1.FontBold = True
Picture1.AutoRedraw = True
drawvc
End Sub
你也可以自己畫(huà)點(diǎn)其他的東西,增加識(shí)別難度
標(biāo)題名稱(chēng):vb.net隨機(jī)驗(yàn)證碼 vb驗(yàn)證碼代碼
標(biāo)題鏈接:http://chinadenli.net/article44/dodehhe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)、企業(yè)建站、品牌網(wǎng)站制作、微信小程序、網(wǎng)站制作、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)