一般登陸網(wǎng)站時(shí)候首先要打開一個(gè)網(wǎng)頁對吧?

創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)、網(wǎng)站制作與策劃設(shè)計(jì),張家口網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:張家口等地區(qū)。張家口做網(wǎng)站價(jià)格咨詢:18982081108
那首先要 GET 一個(gè)網(wǎng)址。GetResponse后,得到的流就是這個(gè)頁面的源碼。
源碼里肯定會包含這個(gè)驗(yàn)證碼的提問段(可能是個(gè)圖片的網(wǎng)址,也可能是個(gè) 5+5=? 之類的字符串之類的),可以分析一下這段代碼出現(xiàn)的位置,讓程序自動尋找。找到這個(gè)圖片的網(wǎng)址,把這個(gè)圖片 GET 下來,然后,就是orc識別或你人工識別咯。。。
Dim CtrlRange As Object
On Error Resume Next
Do
Err.Clear()
CtrlRange = Ie.Document.Body.DomElement.createControlRange()
CtrlRange.Add(Ie.Document.DomDocument.GetElementById("verifypic"))
CtrlRange.execCommand("Copy") '獲取驗(yàn)證碼
If Clipboard.ContainsData(DataFormats.Bitmap) Then
PictureBox1.Image = Clipboard.GetData(DataFormats.Bitmap) '在Picture1控件上顯示
End If
If Err.Number 0 Then WaitingMS(100) ‘延時(shí)
Loop While Err.Number 0
以前找的 vbnet里也可以用
這個(gè)是可以使用api來做的。圖像處理之類的函數(shù)。
另外,還有一種方法是將所有的字符和數(shù)字做成不同的小圖片進(jìn)行拼接而成的一個(gè)字符串序列;
小圖片要自己去做;效果就可以任意展現(xiàn)了。
我會C#.net的,不過邏輯應(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ī)對象
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)
{
//相等的話重新生成
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)證碼的長度成一定比例
int iwidth = (int)(validateCode.Length * 11.5);
//創(chuàng)建一個(gè)長20,寬iwidth的圖像對象
System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 20);
//創(chuàng)建一個(gè)新繪圖對象
Graphics g = Graphics.FromImage(image);
//繪圖用的字體和字號
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)畫圖
g.DrawString(validateCode, f, b, 3, 3);
//創(chuàng)建鉛筆對象
Pen blackPen = new Pen(Color.Black, 0);
//創(chuàng)建隨機(jī)對象
Random rand = new Random();
//隨機(jī)畫線
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();
//配置輸出類型
Response.ContentType = "image/Jpeg";
//輸出內(nèi)容
Response.BinaryWrite(ms.ToArray());
//清空不需要的資源
g.Dispose();
image.Dispose();
}第三步:在page_Load事件中調(diào)用CreateImageM(CreateValidate(4));第四步:判斷服務(wù)器端的驗(yàn)證碼是否與用戶輸入的相同protected void Button1_Click(object sender, EventArgs e)
{
//判斷服務(wù)器端的驗(yàn)證碼是否與用戶輸入的相同
if (TextBox1.Text == Session["Valid"].ToString())
{
//相同則提示歡迎信息
Response.Write("script language='javascript'alert('歡迎光臨')/script");
}
else
{
//不相同則提示錯(cuò)誤信息
Response.Write("script language='javascript'alert('對不起,驗(yàn)證碼錯(cuò)誤')/script");
}
}
Imports?System
Imports?System.Data
Imports?System.Configuration
Imports?System.Collections
Imports?System.Web
Imports?System.Web.Security
Imports?System.Web.UI
Imports?System.Web.UI.WebControls
Imports?System.Web.UI.WebControls.WebParts
Imports?System.Web.UI.HtmlControls
Imports?System.Drawing
Partial?Public?Class?VerifyCode
Inherits?System.Web.UI.Page
Protected?Sub?Page_Load(ByVal?sender?As?Object,?ByVal?e?As?System.EventArgs)
Session("VerifyCode")?=?MakeValidateCode()
CreateImage(Session("VerifyCode").ToString())
End?Sub
Private?Sub?CreateImage(ByVal?checkCode?As?String)
Dim?iwidth?As?Integer?=?CInt(checkCode.Length?*?12)?+?10
Dim?image?As?New?System.Drawing.Bitmap(iwidth,?25)
Dim?g?As?Graphics?=?Graphics.FromImage(image)
g.Clear(Color.White)
'定義顏色
Dim?c()?As?Color?=?{?Color.Black,?Color.Red,?Color.DarkBlue,?Color.Green,?Color.Orange,?Color.Brown,?Color.DarkCyan,?Color.Purple?}
'定義字體
Dim?font()?As?String?=?{?"Verdana",?"Microsoft?Sans?Serif",?"Comic?Sans?MS",?"Arial",?"宋體"?}
Dim?rand?As?New?Random()
'隨機(jī)輸出噪點(diǎn)
For?i?As?Integer?=?0?To?4
Dim?x?As?Integer?=?rand.Next(image.Width)
Dim?y?As?Integer?=?rand.Next(image.Height)
g.DrawRectangle(New?Pen(Color.LightGray,?0),?x,?y,?1,?1)
Next?i
'輸出不同字體和顏色的驗(yàn)證碼字符
For?i?As?Integer?=?0?To?checkCode.Length?-?1
Dim?cindex?As?Integer?=?rand.Next(7)
Dim?findex?As?Integer?=?rand.Next(5)
Dim?f?As?Font?=?New?System.Drawing.Font("宋體",?12,?System.Drawing.FontStyle.Regular)
Dim?b?As?Brush?=?New?System.Drawing.SolidBrush(c(cindex))
Dim?ii?As?Integer?=?4
If?(i?+?1)?Mod?2?=?0?Then
ii?=?2
End?If
g.DrawString(checkCode.Substring(i,?1),?f,?b,?3?+?(i?*?12),?ii)
Next?i
'畫一個(gè)邊框
g.DrawRectangle(New?Pen(Color.Black,?0),?0,?0,?image.Width?-?1,?image.Height?-?1)
'輸出到瀏覽器
Dim?ms?As?New?System.IO.MemoryStream()
image.Save(ms,?System.Drawing.Imaging.ImageFormat.Jpeg)
Response.ClearContent()
Response.ContentType?=?"image/Jpeg"
Response.BinaryWrite(ms.ToArray())
g.Dispose()
image.Dispose()
End?Sub
Private?Function?MakeValidateCode()?As?String
'0?i?o
Dim?s()?As?Char?=?{?"0"c,?"1"c,?"2"c,?"3"c,?"4"c,?"5"c,?"6"c,?"7"c,?"8"c,?"9"c,?"A"c,?"B"c,?"C"c,?"D"c,?"E"c,?"F"c,?"G"c,?"J"c,?"K"c,?"L"c,?"M"c,?"N"c,?"P"c,?"Q"c,?"R"c,?"S"c,?"T"c,?"U"c,?"V"c,?"W"c,?"X"c,?"Y"c,?"Z"c?}
Dim?num?As?String?=?""
Dim?r?As?New?Random()
For?i?As?Integer?=?0?To?3
num?=?s(r.Next(0,?s.Length?-?1)).ToString()
Next?i
Return?num
End?Function
End?Class
建一個(gè)YanzhenCard.aspx文件
保留%@ 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對象繪制指定的文本字符串。
Dim ms As MemoryStream = New MemoryStream '創(chuàng)建其支持存儲區(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" /
文章標(biāo)題:vb.net顯示驗(yàn)證碼的簡單介紹
當(dāng)前URL:http://chinadenli.net/article23/dsgdpcs.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、企業(yè)建站、網(wǎng)站改版、網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)