49 lines of code, three files
ASP File: code.asp
Data file: Body. Fix, Head.fix
Usage:
<%option explicitresponse.buffer=truenumcodefunction numcode () Response.Expires =-1 Response.AddHeader "PRAGM A "," No-cache "Response.AddHeader" Cache-ctrol "," No-cache "Dim znum,i,j Dim ados,ados1 Randomize Timer Znum = CInt (8999*rnd+1000) session ("GetCode") = Znum Dim zimg (4), Nstr Nstr=cstr (znum) for i=0 to 3 Zimg (i) =cint (Mid (nstr,i+1,1)) Next Dim Pos Set Ados=server.createobject ("ADODB.stream") ados.mode=3 Ados.type=1 Ados.open Set Ados1=server.createobject ("ADODB.stream") ados1.mode=3 Ados1.typ E=1 ados1.open ados.loadfromfile Server.MapPath ("body. Fix ")) Ados1.write Ados.read (1280) for i=0 to 3 ados.position= (9-zimg (i)) *320 sition=i*320 ados1.write Ados.read ($) Next Ados.loadfromfile (Server.MapPath ("Head.fix")) Pos=lenb (Ados.read ()) Ados.position=pos 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 Next Next Response.ContentType = "Image/bmp" ados.position=0 Response.BinaryWrite ados.read () Ados.Close:set ados=nothing Ados1.Close:set ados1=nothingend functio N ' Asp code Created by blueidea.com Web team V37 2003-7-25%>
Code Explanation:
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 vertical arrays of numbers
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
' Specify POS location, and then offset 54-byte locations to add graphic data
The second for loop, a numeric array transformation, and a vertical block converted to a horizontal number block
The method is to extract 4 times 30 bytes of the ADOs object from 320 bytes, and then extract the image data from the second row.
30 bytes is due to BMP wide long no 00 00 Line end Tag
The following is a referenced content:
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
Next
Next
ados.position=0
Response. BinaryWrite sends image data directly to the client
Response.ContentType = "Image/bmp"
Response.BinaryWrite ados.read ()
Ados.close: Set ados=nothing
Ados1.Close:set ados1=nothing
End Function