The main thing to read these code is to understand the objects that manipulate binary data in ASP adodb.stream! This procedure is mainly used is adodb.stream, if you have this basis, you can further add more features such as adding miscellaneous points, gradient background, the number of dislocation, strokes short points, improve the recognition of the impossible by OCR. There is no good identification engine, yesterday downloaded a claim to recognize the image verification code 90%, the 4321 recognized as 89910, so the image code is still relatively safe.
On the Internet to see the method of violent cracking, if I use the image add-on code + prohibit the external submission + 10 times password Error seal account number + 50 times password error ip+10 seconds of the anti-refresh interval registration page, landing page Plus + prohibit external submissions, so that the violent cracking should not be done.
ASP File: code.asp
Data file: Body. Fix, Head.fix
Demo: This site PHP has no demo
Usage:
Download: Click to download
Modify the code a little, and give a version that you can change the number for yourself: Click to download, use the image software to open body.bmp directly edit the font and color you need!
Code.asp file:
Response.Buffer = True
Numcode
Function Numcode ()
Response.Expires =-1
Response.AddHeader "Pragma", "No-cache"
Response.AddHeader "Cache-ctrol", "No-cache"
Dim znum,i,j
Dim ados,ados1
Randomize Timer
Generate a random four-digit number:
Znum = CInt (8999*rnd+1000)
Pass to session
Session ("GetCode") = Znum
The For loop is an array of random numbers placed in a subscript 3 to facilitate subsequent array transformations
Dim zimg (3), NSTR
Nstr=cstr (Znum)
For I=0 to 3
Zimg (i) =cint (Mid (nstr,i+1,1))
Next
Dim Pos
' Define two ADODB. Stream binary object for image data manipulation:
Set Ados=server.createobject ("ADODB.stream")
Ados.mode=3
Ados.type=1
Ados.open
Set Ados1=server.createobject ("ADODB.stream")
Ados1.mode=3
Ados1.type=1
Ados1.open
' Load 0~9 digital data 10x100, GBR array data, each 320 byte, 10 digits 3200byte
' BGR a point, 10x10 a number, a point three bytes (binary 8-bit, 16-system 00~FF)
' Line 10 points 30 bytes + Line end tag 00 2 bytes 32 bytes, so a 10x100 width is less than long image each digit 10x10 is 320 bytes
' The No Line end tag 0000, directly 300 bytes.
These are the BMP 24bit data details.
' As for the head, also very simple, contains the long width, the image starts the mark and so on ~ ~ Only 54 bytes, far does not have JPG what the complex
Ados.loadfromfile (Server.MapPath) ("body." Fix "))
Ados1.write Ados.read (1280)
' The first for loop, which extracts the corresponding four digits from the 10x100 digital array by the generated random number sequence, but the vertical array of digits
For I=0 to 3
ados.position= (9-zimg (i)) *320
ados1.position=i*320
Ados1.write Ados.read (320)
Next
' Empty the ADOs data to replace the new image header 54-byte header file
Ados.loadfromfile (Server.MapPath ("Head.fix"))
Pos=lenb (Ados.read ())
Ados.position=pos ' Specifies the Pos position, which can be offset by a 54-byte position to add graphic data, a second for loop, a numeric array transformation, a vertical block converted to a horizontal block of numbers, and the method is to extract 4 times 30 bytes of 320 bytes to write the ADOs object. And then extract the second row of image data, 30 bytes is because BMP large long without 00 00 of the line end tag
For i=0 to 9 Step 1
For J=0 to 3
ados1.position=i*32+j*320
ados.position=pos+30*j+i*120
Ados.write Ados1.read (30)
Next
Next
Ados.position=0
Response. BinaryWrite ' send image data directly to client
Response.ContentType = "Image/bmp"
Response.BinaryWrite Ados.read ()
Ados.Close:set ados=nothing
Ados1.Close:set ados1=nothing
End Function
The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion;
products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the
content of the page makes you feel confusing, please write us an email, we will handle the problem
within 5 days after receiving your email.
If you find any instances of plagiarism from the community, please send an email to:
info-contact@alibabacloud.com
and provide relevant evidence. A staff member will contact you within 5 working days.