MSG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
D:\Temp\找图片图标\验证码\Code_4.asp 编码GB2312
<%  '************************************************************  '作者:云端  '版权:源代码公开,各种用途均可免费使用。  '创建:2013-11-16  '联系:QQ313801120 交流群35915100 邮箱313801120@qq.com  '* Powered By 云端  '************************************************************  Option Explicit  Response.Buffer = True  Response.Expires = -1  Response.ExpiresAbsolute = Now() - 1  Response.AddHeader "cache-control", "no-cache"  Response.AddHeader "Pragma", "no-cache"  Response.ContentType = "Image/BMP"  'If Trim(Request.ServerVariables("HTTP_REFERER"))="" Then response.End()  '明确变量申明  '此处设置置会话超时为3分钟  Session.Timeout = 3  '随机运行,以确保一个随机号码检索  Randomize  '声明变量  Dim jpeg  Dim pixelsAcross, textColour, CodeTotal  Dim sessionnaem  Dim randomNumber : randomNumber = Int(Rnd * 7) + 1  '验证码全局变量名称设定  sessionnaem = "Verifycode"  '验证码个数  CodeTotal = 4  '文字颜色  textColour = randomFomtcolor(randomNumber)  '验证码缩进距离  pixelsAcross = Int(Rnd * 20) + 3  '创建一个jpeg对象  On Error Resume Next  Set jpeg = Server.CreateObject("Persits.jpeg") If Err Then '不支持aspjpeg则用原来的 Err.Clear  Com_CreatValidCode  Response.End  End If  '打开随机背景图片 drawBackGroud randomNumber, 170, 60  '绘制字符 doString  '随机线 drawLines  '随机圆 drawCircle  '随机矩形   'drawBar   '返回的二进制,申明本页为一个JPEG图片类型 jpeg.SendBinary  Set jpeg = Nothing  '函数(drawBackGroud):打开背景图片 
Function drawBackGroud(srandom, swidth, sheight) jpeg.Open Server.MapPath("background/background" & srandom & ".jpg")  jpeg.Width = swidth  jpeg.Height = sheight  End Function
  '函数(drawLines):绘制随机线 
Sub drawLines jpeg.Canvas.Pen.Color = &HADCD3C  jpeg.Canvas.DrawLine 0, Int(Rnd * jpeg.Height), jpeg.Width, Int(Rnd * jpeg.Height)  End Sub
  '函数(drawBar):绘制随机矩形框 
Sub drawBar jpeg.Canvas.Brush.Solid = False '填充  '矩形边框颜色 jpeg.Canvas.Pen.Color = &H9CCF00  '绘制矩形框 jpeg.Canvas.Bar Int(Rnd * jpeg.Width), Int(Rnd * jpeg.Height), Int(Rnd * 50) + 20, Int(Rnd * 50) + 20  End Sub
  '函数(drawCircle):绘制随机圆 
Sub drawCircle jpeg.Canvas.Brush.Solid = False '填充  jpeg.Canvas.Pen.Color = &H8080FF  jpeg.Canvas.Circle Int(Rnd * jpeg.Width), Int(Rnd * jpeg.Height), Int(Rnd * 10) + 5  jpeg.Canvas.Pen.Color = &HEEEEEE  jpeg.Canvas.Circle Int(Rnd * jpeg.Width), Int(Rnd * jpeg.Height), Int(Rnd * 10) + 10  End Sub
  '函数(doString):绘制验证码字符 
Sub doString Dim theString  Dim X  '获取坠机字符串 theString = createRandomString()  '循环通过字符串的每个字符 For X = 1 To Len(theString) '在验证码图片当前位置打印字符 addLetter Mid(theString, X, 1)  Next  End Sub
  '函数(addLetter)在验证码图片当前位置打印字符 
Sub addLetter(theLetter) '字体的颜色 jpeg.Canvas.Font.Color = textColour  '字体阴影 jpeg.Canvas.Font.ShadowColor = &HFFFFFF  '是否为粗体 故不做随机判断,而是直接设定加粗   'if doTextStyle then jpeg.Canvas.Font.Bold = True  'End If If doTextStyle Then '下划线 'jpeg.Canvas.Font.Underlined = True End If  '是否为斜体 If doTextStyle Then jpeg.Canvas.Font.Italic = True  End If  '字体 jpeg.Canvas.Font.Family = "Arial Black" 'randomFont()  '字体大小 jpeg.Canvas.Font.Size = randomFontSize()  '文字清晰度 jpeg.Canvas.Font.Quality = 8  '背景色 当前使用了背景图,故此处注释掉   'jpeg.Canvas.Font.BkColor = backColour   '字体背景模式(处理平滑) jpeg.Canvas.Font.BkMode = "transparent"  '绘制字符 jpeg.canvas.print pixelsAcross, Int(Rnd * 5), theLetter  '字符宽度 pixelsAcross = pixelsAcross + Int(Rnd * 10) + 30  End Sub
  '返回随机真假值各机率为50% 
Function doTextStyle() If Rnd() > 0.5 Then doTextStyle = True  Else doTextStyle = False  End If  End Function
  '返回验证码中各字符的随机大小 
Function randomFontSize() Dim theNumber  '获取一个随机大小,范围(40-60) theNumber = Int(Rnd * 20) + 40  randomFontSize = theNumber  End Function
  '返回随机验证码文字颜色 
Function randomFomtcolor(srandomm) Dim arrFomtcolor(8)  arrFomtcolor(1) = &HBDE3FF  arrFomtcolor(2) = &HD68618  arrFomtcolor(3) = &H086529  arrFomtcolor(4) = &H637594  arrFomtcolor(5) = &Hffffff  arrFomtcolor(6) = &HBDDBF7  arrFomtcolor(7) = &H08756B  arrFomtcolor(8) = &H295131  randomFomtcolor = arrFomtcolor(srandomm)  End Function
  '返回随机字体 
Function randomFont() Dim theNumber  Dim font  '取得1-6区间内一随机字符 theNumber = Int(Rnd * 5) + 1  '随机字体 If theNumber = 1 Then font = "Arial Black"  ElseIf theNumber = 2 Then font = "Courier New"  ElseIf theNumber = 3 Then font = "Helvetica"  ElseIf theNumber = 4 Then font = "Times New Roman"  ElseIf theNumber = 5 Then font = "Verdana"  Else font = "Geneva"  End If  randomFont = font  End Function
  '返回随机验证证字符串 
Function createRandomString Dim outputString  Dim X  For X = 0 To CodeTotal - 1 '英文字符出现机率60%, 数字出现机率40% If Rnd() < 0.6 Then '返回一个随机英文字符 outputString = outputString & Chr(Int((26 * Rnd()) + 65))  Else '返回一个随机数字 outputString = outputString & Chr(Int((10 * Rnd()) + 48))  End If  Next  Session(sessionnaem) = outputString  createRandomString = outputString  End Function
  '自带验证码 
Sub Com_CreatValidCode() Randomize  Dim I, II, III  Const cOdds = 5 '杂点出现的机率  Const cAmount = 10 '文字数量  Const cCode = "0123456789"  '颜色的数据(字符,背景) Dim vColorData(1)  vColorData(0) = ChrB(0) & ChrB(0) & ChrB(2) '蓝0,绿0,红0(黑色)  vColorData(1) = ChrB(255) & ChrB(255) & ChrB(255) '蓝250,绿236,红211(浅蓝色)  '随机产生字符 Dim vCode(4), vCodes  For I = 0 To 3 vCode(I) = Int(Rnd * cAmount)  vCodes = vCodes & Mid(cCode, vCode(I) + 1, 1)  Next  Session("Verifycode") = vCodes '记录入Session  '字符的数据 Dim vNumberData(9)  vNumberData(0) = "1110000111110111101111011110111101001011110100101111010010111101001011110111101111011110111110000111"  vNumberData(1) = "1111011111110001111111110111111111011111111101111111110111111111011111111101111111110111111100000111"  vNumberData(2) = "1110000111110111101111011110111111111011111111011111111011111111011111111011111111011110111100000011"  vNumberData(3) = "1110000111110111101111011110111111110111111100111111111101111111111011110111101111011110111110000111"  vNumberData(4) = "1111101111111110111111110011111110101111110110111111011011111100000011111110111111111011111111000011"  vNumberData(5) = "1100000011110111111111011111111101000111110011101111111110111111111011110111101111011110111110000111"  vNumberData(6) = "1111000111111011101111011111111101111111110100011111001110111101111011110111101111011110111110000111"  vNumberData(7) = "1100000011110111011111011101111111101111111110111111110111111111011111111101111111110111111111011111"  vNumberData(8) = "1110000111110111101111011110111101111011111000011111101101111101111011110111101111011110111110000111"  vNumberData(9) = "1110001111110111011111011110111101111011110111001111100010111111111011111111101111011101111110001111"  '输出图像文件头 Response.BinaryWrite ChrB(66) & ChrB(77) & ChrB(230) & ChrB(4) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & _  ChrB(0) & ChrB(0) & ChrB(54) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(40) & ChrB(0) & _  ChrB(0) & ChrB(0) & ChrB(40) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(10) & ChrB(0) & _  ChrB(0) & ChrB(0) & ChrB(1) & ChrB(0)  '输出图像信息头 Response.BinaryWrite ChrB(24) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(176) & ChrB(4) & _  ChrB(0) & ChrB(0) & ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) & ChrB(18) & ChrB(11) & _  ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & _  ChrB(0) & ChrB(0)  For I = 9 To 0 Step - 1 '历经所有行 For II = 0 To 3 '历经所有字 For III = 1 To 10 '历经所有像素 '逐行、逐字、逐像素地输出图像数据 If Rnd * 99 + 1 < cOdds Then '随机生成杂点 If Mid(vNumberData(vCode(II)), I * 10 + III, 1) Then Response.BinaryWrite vColorData(0)  Else Response.BinaryWrite vColorData(1)  End If  Else Response.BinaryWrite vColorData(Mid(vNumberData(vCode(II)), I * 10 + III, 1))  End If  Next  Next  Next  End Sub
  %>
 
隐藏注释
正常版
简洁版
简洁去注释
代码不变版
复制代码