ASP程序调用验证码

调用方法 < img src = " getcode.asp " >< input name = " vcode "  type = " input " >
在服务器验证的时候Session(
" GetCode " =  Request.Form( " vcode " )


文件GetCode.asp
< %
Const  nMaxSaturation  =  100     '  最大色彩饱和度
Const  nBlankNoisyDotOdds  =  0.2    '  空白处噪点率
Const  nColorNoisyDotOdds  =  0.1  '  有色处噪点率
Const  nCharCount  =  4        '  产生的字符个数
Const  nPixelWidth  =  20       '  单个字符位图的宽度
Const  nPixelHeight  =  20         '  单个字符位图的高度
Const  nColorHue  =  220        '  显示验证码的色调(-1表示随机色调, -2表示灰度色调)
Const  nAngleRandom  =  10           '  角度随机量
Const  nLengthRandom  =  10          '  长度随机量(百分比)
Const  cCharSet  =  " 0123456789 "
                                
'  构成验证码的字符集
                                 '  如果扩充了下边的字母矢量库,则可以相应扩充这个字符集

Dim  Buf(), DigtalStr
Dim  Lines(), LineCount
Dim  CursorX, CursorY, DirX, DirY

Randomize
Call  CreatValidCode( " GetCode " )

Sub  CDGen_Reset()
 
'  复位矢量笔和环境变量
 LineCount  =  0
 CursorX 
=  0
 CursorY 
=  0
 
'  初始的光笔方向是垂直向下
 DirX  =  0
 DirY 
=  1
End Sub

Sub  CDGen_Clear()
 
'  清空位图阵列
  Dim  i, j
 
ReDim  Buf(nPixelHeight  -  1 , nCharCount  *  nPixelWidth  -  1 )

 
For  j  =  0  To  nPixelHeight  -  1
  
For  i  =  0  To  nCharCount  *  nPixelWidth  -  1
   Buf(j, i) 
=  0
  
Next
 
Next
End Sub

Sub  CDGen_PSet(X, Y)
 
'  在位图阵列上画点
 Buf(Y, X)  =  1
End Sub

Sub  CDGen_Line(X1, Y1, X2, Y2)
 
'  在位图阵列上画线
  Dim  DX, DY, DeltaT, i
 
 DX 
=  X2  -  X1
 DY 
=  Y2  -  Y1
 
If  Abs (DX)  >  Abs (DY)  Then  DeltaT  =  Abs (DX)  Else  DeltaT  =  Abs (DY)
 
For  i  =  0  To  DeltaT
  CDGen_PSet X1 
+  DX  *  i  /  DeltaT, Y1  +  DY  *  i  /  DeltaT
 
Next
End Sub

Sub  CDGen_FowardDraw(nLength)
 
'  按当前光笔方向绘制指定长度并移动光笔,正数表示从左向右/从上向下绘制,负数表示从右向左/从下向上绘制
 nLength  =  Sgn (nLength)  *  Abs (nLength)  *  ( 1  -  nLengthRandom  /  100  +  Rnd  *  nLenghtRandom  *  2  /  100 )
 
ReDim  Preserve Lines( 3 , LineCount)
 Lines(
0 , LineCount)  =  CursorX
 Lines(
1 , LineCount)  =  CursorY
 CursorX 
=  CursorX  +  DirX  *  nLength
 CursorY 
=  CursorY  +  DirY  *  nLength
 Lines(
2 , LineCount)  =  CursorX
 Lines(
3 , LineCount)  =  CursorY
 LineCount 
=  LineCount  +  1
End Sub

Sub  CDGen_SetDirection(nAngle)
 
'  按指定角度设定画笔方向, 正数表示相对当前方向顺时针改变方向,负数表示相对当前方向逆时针改变方向
  Dim  DX, DY
 
 nAngle 
=  Sgn (nAngle)  *  ( Abs (nAngle)  -  nAngleRandom  +  Rnd  *  nAngleRandom  *  2 /  180  *  3.1415926
 DX 
=  DirX
 DY 
=  DirY
 DirX 
=  DX  *  Cos (nAngle)  -  DY  *  Sin (nAngle)
 DirY 
=  DX  *  Sin (nAngle)  +  DY  *  Cos (nAngle)
End Sub

Sub  CDGen_MoveToMiddle(nActionIndex, nPercent)
 
'  将画笔光标移动到指定动作的中间点上,nPercent为中间位置的百分比
  Dim  DeltaX, DeltaY
 
 DeltaX 
=  Lines( 2 , nActionIndex)  -  Lines( 0 , nActionIndex)
 DeltaY 
=  Lines( 3 , nActionIndex)  -  Lines( 1 , nActionIndex)
 CursorX 
=  Lines( 0 , nActionIndex)  +  Sgn (DeltaX)  *  Abs (DeltaX)  *  nPercent  /  100
 CursorY 
=  Lines( 1 , nActionIndex)  +  Sgn (DeltaY)  *  Abs (DeltaY)  *  nPercent  /  100
End Sub

Sub  CDGen_MoveCursor(nActionIndex)
 
'  将画笔光标移动到指定动作的起始点上
 CursorX  =  Lines( 0 , nActionIndex)
 CursorY 
=  Lines( 1 , nActionIndex)
End Sub

Sub  CDGen_Close(nActionIndex)
 
'  将当前光笔位置与指定动作的起始点闭合并移动光笔
  ReDim  Preserve Lines( 3 , LineCount)
 Lines(
0 , LineCount)  =  CursorX
 Lines(
1 , LineCount)  =  CursorY
 CursorX 
=  Lines( 0 , nActionIndex)
 CursorY 
=  Lines( 1 , nActionIndex)
 Lines(
2 , LineCount)  =  CursorX
 Lines(
3 , LineCount)  =  CursorY
 LineCount 
=  LineCount  +  1
End Sub

Sub  CDGen_CloseToMiddle(nActionIndex, nPercent)
 
'  将当前光笔位置与指定动作的中间点闭合并移动光笔,nPercent为中间位置的百分比
  Dim  DeltaX, DeltaY
 
 
ReDim  Preserve Lines( 3 , LineCount)
 Lines(
0 , LineCount)  =  CursorX
 Lines(
1 , LineCount)  =  CursorY
 DeltaX 
=  Lines( 2 , nActionIndex)  -  Lines( 0 , nActionIndex)
 DeltaY 
=  Lines( 3 , nActionIndex)  -  Lines( 1 , nActionIndex)
 CursorX 
=  Lines( 0 , nActionIndex)  +  Sgn (DeltaX)  *  Abs (DeltaX)  *  nPercent  /  100
 CursorY 
=  Lines( 1 , nActionIndex)  +  Sgn (DeltaY)  *  Abs (DeltaY)  *  nPercent  /  100
 Lines(
2 , LineCount)  =  CursorX
 Lines(
3 , LineCount)  =  CursorY
 LineCount 
=  LineCount  +  1
End Sub

Sub  CDGen_Flush(X0, Y0)
 
'  按照当前的画笔动作序列绘制位图点阵
  Dim  MaxX, MinX, MaxY, MinY
 
Dim  DeltaX, DeltaY, StepX, StepY, OffsetX, OffsetY
 
Dim  i

 MaxX 
=  MinX  =  MaxY  =  MinY  =  0
 
For  i  =  0  To  LineCount  -  1
  
If  MaxX  <  Lines( 0 , i)  Then  MaxX  =  Lines( 0 , i)
  
If  MaxX  <  Lines( 2 , i)  Then  MaxX  =  Lines( 2 , i)
  
If  MinX  >  Lines( 0 , i)  Then  MinX  =  Lines( 0 , i)
  
If  MinX  >  Lines( 2 , i)  Then  MinX  =  Lines( 2 , i)
  
If  MaxY  <  Lines( 1 , i)  Then  MaxY  =  Lines( 1 , i)
  
If  MaxY  <  Lines( 3 , i)  Then  MaxY  =  Lines( 3 , i)
  
If  MinY  >  Lines( 1 , i)  Then  MinY  =  Lines( 1 , i)
  
If  MinY  >  Lines( 3 , i)  Then  MinY  =  Lines( 3 , i)
 
Next
 DeltaX 
=  MaxX  -  MinX
 DeltaY 
=  MaxY  -  MinY
 
If  DeltaX  =  0  Then  DeltaX  =  1
 
If  DeltaY  =  0  Then  DeltaY  =  1
 MaxX 
=  MinX
 MaxY 
=  MinY
 
If  DeltaX  >  DeltaY  Then
  StepX 
=  (nPixelWidth  -  2 /  DeltaX
  StepY 
=  (nPixelHeight  -  2 /  DeltaX
  OffsetX 
=  0
  OffsetY 
=  (DeltaX  -  DeltaY)  /  2
 
Else
  StepX 
=  (nPixelWidth  -  2 /  DeltaY
  StepY 
=  (nPixelHeight  -  2 /  DeltaY
  OffsetX 
=  (DeltaY  -  DeltaX)  /  2
  OffsetY 
=  0
 
End  If
 
For  i  =  0  To  LineCount  -  1
  Lines(
0 , i)  =  Round ((Lines( 0 , i)  -  MaxX  +  OffsetX)  *  StepX,  0 )
  
If  Lines( 0 , i)  <  0  Then  Lines( 0 , i)  =  0
  
If  Lines( 0 , i)  >=  nPixelWidth  -  2  Then  Lines( 0 , i)  =  nPixelWidth  -  3
  Lines(
1 , i)  =  Round ((Lines( 1 , i)  -  MaxY  +  OffsetY)  *  StepY,  0 )
  
If  Lines( 1 , i)  <  0  Then  Lines( 1 , i)  =  0
  
If  Lines( 1 , i)  >=  nPixelHeight  -  2  Then  Lines( 1 , i)  =  nPixelHeight  -  3
  Lines(
2 , i)  =  Round ((Lines( 2 , i)  -  MinX  +  OffsetX)  *  StepX,  0 )
  
If  Lines( 2 , i)  <  0  Then  Lines( 2 , i)  =  0
  
If  Lines( 2 , i)  >=  nPixelWidth  -  2  Then  Lines( 2 , i)  =  nPixelWidth  -  3
  Lines(
3 , i)  =  Round ((Lines( 3 , i)  -  MinY  +  OffsetY)  *  StepY,  0 )
  
If  Lines( 3 , i)  <  0  Then  Lines( 3 , i)  =  0
  
If  Lines( 3 , i)  >=  nPixelHeight  -  2  Then  Lines( 3 , i)  =  nPixelHeight  -  3
  CDGen_Line Lines(
0 , i)  +  X0  +  1 , Lines( 1 , i)  +  Y0  +  1 , Lines( 2 , i)  +  X0  +  1 , Lines( 3 , i)  +  Y0  +  1
 
Next
End Sub

Sub  CDGen_Char(cChar, X0, Y0)
 
'  在指定坐标处生成指定字符的位图阵列
 CDGen_Reset
 
Select  Case  cChar
 
Case  " 0 "
  CDGen_SetDirection 
- 60                              '  逆时针60度(相对于垂直线)
  CDGen_FowardDraw  - 0.7                               '  反方向绘制0.7个单位
  CDGen_SetDirection  - 60                              '  逆时针60度
  CDGen_FowardDraw  - 0.7                               '  反方向绘制0.7个单位
  CDGen_SetDirection  120                              '  顺时针120度
  CDGen_FowardDraw  1.5                                '  绘制1.5个单位
  CDGen_SetDirection  - 60                              '  逆时针60度
  CDGen_FowardDraw  0.7                                '  绘制0.7个单位
  CDGen_SetDirection  - 60                              '  顺时针120度
  CDGen_FowardDraw  0.7                                '  绘制0.7个单位
  CDGen_Close  0                                       '  封闭当前笔与第0笔(0开始)
  Case  " 1 "
  CDGen_SetDirection 
- 90                              '  逆时针90度(相对于垂直线)
  CDGen_FowardDraw  0.5                                '  绘制0.5个单位
  CDGen_MoveToMiddle  0 50                            '  移动画笔的位置到第0笔(0开始)的50%处
  CDGen_SetDirection  90                               '  逆时针90度
  CDGen_FowardDraw  - 1.4                               '  反方向绘制1.4个单位
  CDGen_SetDirection  30                               '  逆时针30度
  CDGen_FowardDraw  0.4                                '  绘制0.4个单位
  Case  " 2 "
  CDGen_SetDirection 
45                               '  顺时针45度(相对于垂直线)
  CDGen_FowardDraw  - 0.7                               '  反方向绘制0.7个单位
  CDGen_SetDirection  - 120                             '  逆时针120度
  CDGen_FowardDraw  0.4                                '  绘制0.4个单位
  CDGen_SetDirection  60                               '  顺时针60度
  CDGen_FowardDraw  0.6                                '  绘制0.6个单位
  CDGen_SetDirection  60                               '  顺时针60度
  CDGen_FowardDraw  1.6                                '  绘制1.6个单位
  CDGen_SetDirection  - 135                             '  逆时针135度
  CDGen_FowardDraw  1.0                                '  绘制1.0个单位
  Case  " 3 "
  CDGen_SetDirection 
- 90                              '  逆时针90度(相对于垂直线)
  CDGen_FowardDraw  0.8                                '  绘制0.8个单位
  CDGen_SetDirection  135                              '  顺时针135度
  CDGen_FowardDraw  0.8                                '  绘制0.8个单位
  CDGen_SetDirection  - 120                             '  逆时针120度
  CDGen_FowardDraw  0.6                                '  绘制0.6个单位
  CDGen_SetDirection  80                               '  顺时针80度
  CDGen_FowardDraw  0.5                                '  绘制0.5个单位
  CDGen_SetDirection  60                               '  顺时针60度
  CDGen_FowardDraw  0.5                                '  绘制0.5个单位
  CDGen_SetDirection  60                               '  顺时针60度
  CDGen_FowardDraw  0.5                                '  绘制0.5个单位
  Case  " 4 "
  CDGen_SetDirection 
20                               '  顺时针20度(相对于垂直线)
  CDGen_FowardDraw  0.8                                '  绘制0.8个单位
  CDGen_SetDirection  - 110                             '  逆时针110度
  CDGen_FowardDraw  1.2                                '  绘制1.2个单位
  CDGen_MoveToMiddle  1 60                            '  移动画笔的位置到第1笔(0开始)的60%处
  CDGen_SetDirection  90                               '  顺时针90度
  CDGen_FowardDraw  0.7                                '  绘制0.7个单位
  CDGen_MoveCursor  2                                  '  移动画笔到第2笔(0开始)的开始处
  CDGen_FowardDraw  - 1.5                               '  反方向绘制1.5个单位
  Case  " 5 "
  CDGen_SetDirection 
90                               '  顺时针90度(相对于垂直线)
  CDGen_FowardDraw  1.0                                '  绘制1.0个单位
  CDGen_SetDirection  - 90                              '  逆时针90度
  CDGen_FowardDraw  0.8                                '  绘制0.8个单位
  CDGen_SetDirection  - 90                              '  逆时针90度
  CDGen_FowardDraw  0.8                                '  绘制0.8个单位
  CDGen_SetDirection  30                               '  顺时针30度
  CDGen_FowardDraw  0.4                                '  绘制0.4个单位
  CDGen_SetDirection  60                               '  顺时针60度
  CDGen_FowardDraw  0.4                                '  绘制0.4个单位
  CDGen_SetDirection  30                               '  顺时针30度
  CDGen_FowardDraw  0.5                                '  绘制0.5个单位
  CDGen_SetDirection  60                               '  顺时针60度
  CDGen_FowardDraw  0.8                                '  绘制0.8个单位
  Case  " 6 "
  CDGen_SetDirection 
- 60                              '  逆时针60度(相对于垂直线)
  CDGen_FowardDraw  - 0.7                               '  反方向绘制0.7个单位
  CDGen_SetDirection  - 60                              '  逆时针60度
  CDGen_FowardDraw  - 0.7                               '  反方向绘制0.7个单位
  CDGen_SetDirection  120                              '  顺时针120度
  CDGen_FowardDraw  1.5                                '  绘制1.5个单位
  CDGen_SetDirection  120                              '  顺时针120度
  CDGen_FowardDraw  - 0.7                               '  反方向绘制0.7个单位
  CDGen_SetDirection  120                              '  顺时针120度
  CDGen_FowardDraw  0.7                                '  绘制0.7个单位
  CDGen_SetDirection  120                              '  顺时针120度
  CDGen_FowardDraw  - 0.7                               '  反方向绘制0.7个单位
  CDGen_SetDirection  120                              '  顺时针120度
  CDGen_FowardDraw  0.5                                '  绘制0.5个单位
  CDGen_CloseToMiddle  2 50                           '  将当前画笔位置与第2笔(0开始)的50%处封闭
  Case  " 7 "
  CDGen_SetDirection 
180                              '  顺时针180度(相对于垂直线)
  CDGen_FowardDraw  0.3                                '  绘制0.3个单位
  CDGen_SetDirection  90                               '  顺时针90度
  CDGen_FowardDraw  0.9                                '  绘制0.9个单位
  CDGen_SetDirection  120                              '  顺时针120度
  CDGen_FowardDraw  1.3                                '  绘制1.3个单位
  Case  " 8 "
  CDGen_SetDirection 
- 60                              '  逆时针60度(相对于垂直线)
  CDGen_FowardDraw  - 0.8                               '  反方向绘制0.8个单位
  CDGen_SetDirection  - 60                              '  逆时针60度
  CDGen_FowardDraw  - 0.8                               '  反方向绘制0.8个单位
  CDGen_SetDirection  120                              '  顺时针120度
  CDGen_FowardDraw  0.8                                '  绘制0.8个单位
  CDGen_SetDirection  110                              '  顺时针110度
  CDGen_FowardDraw  - 1.5                               '  反方向绘制1.5个单位
  CDGen_SetDirection  - 110                             '  逆时针110度
  CDGen_FowardDraw  0.9                                '  绘制0.9个单位
  CDGen_SetDirection  60                               '  顺时针60度
  CDGen_FowardDraw  0.8                                '  绘制0.8个单位
  CDGen_SetDirection  60                               '  顺时针60度
  CDGen_FowardDraw  0.8                                '  绘制0.8个单位
  CDGen_SetDirection  60                               '  顺时针60度
  CDGen_FowardDraw  0.9                                '  绘制0.9个单位
  CDGen_SetDirection  70                               '  顺时针70度
  CDGen_FowardDraw  1.5                               '  绘制1.5个单位
  CDGen_Close  0                                       '  封闭当前笔与第0笔(0开始)
  Case  " 9 "
  CDGen_SetDirection 
120                              '  逆时针60度(相对于垂直线)
  CDGen_FowardDraw  - 0.7                               '  反方向绘制0.7个单位
  CDGen_SetDirection  - 60                              '  逆时针60度
  CDGen_FowardDraw  - 0.7                               '  反方向绘制0.7个单位
  CDGen_SetDirection  - 60                              '  顺时针120度
  CDGen_FowardDraw  - 1.5                                '  绘制1.5个单位
  CDGen_SetDirection  - 60                              '  顺时针120度
  CDGen_FowardDraw  - 0.7                               '  反方向绘制0.7个单位
  CDGen_SetDirection  - 60                              '  顺时针120度
  CDGen_FowardDraw  - 0.7                                '  绘制0.7个单位
  CDGen_SetDirection  120                              '  顺时针120度
  CDGen_FowardDraw  0.7                               '  反方向绘制0.7个单位
  CDGen_SetDirection  - 60                              '  顺时针120度
  CDGen_FowardDraw  0.5                                '  绘制0.5个单位
  CDGen_CloseToMiddle  2 50                           '  将当前画笔位置与第2笔(0开始)的50%处封闭
  '  以下为字母的矢量动作,有兴趣的可以继续
  Case  " A "
  CDGen_SetDirection 
- ( Rnd  *  20  +  150 )               '  逆时针150-170度(相对于垂直线)
  CDGen_FowardDraw  Rnd  *  0.2  +  1.1                    '  绘制1.1-1.3个单位
  CDGen_SetDirection  Rnd  *  20  +  140                   '  顺时针140-160度
  CDGen_FowardDraw  Rnd  *  0.2  +  1.1                    '  绘制1.1-1.3个单位
  CDGen_MoveToMiddle  0 30                            '  移动画笔的位置到第1笔(0开始)的30%处
  CDGen_CloseToMiddle  1 70                           '  将当前画笔位置与第1笔(0开始)的70%处封闭
  Case  " B "
  CDGen_SetDirection 
- ( Rnd  *  20  +  50 )                '  逆时针50-70度(相对于垂直线)
  CDGen_FowardDraw  Rnd  *  0.4  +  0.8                    '  绘制0.8-1.2个单位
  CDGen_SetDirection  Rnd  *  20  +  110                   '  顺时针110-130度
  CDGen_FowardDraw  Rnd  *  0.2  +  0.6                    '  绘制0.6-0.8个单位
  CDGen_SetDirection  - ( Rnd  *  20  +  110 )               '  逆时针110-130度
  CDGen_FowardDraw  Rnd  *  0.2  +  0.6                    '  绘制0.6-0.8个单位
  CDGen_SetDirection  Rnd  *  20  +  110                   '  顺时针110-130度
  CDGen_FowardDraw  Rnd  *  0.4  +  0.8                    '  绘制0.8-1.2个单位
  CDGen_Close  0                                       '  封闭当前笔与第1笔(0开始)
  Case  " C "
  CDGen_SetDirection 
- 60                              '  逆时针60度(相对于垂直线)
  CDGen_FowardDraw  - 0.7                               '  反方向绘制0.7个单位
  CDGen_SetDirection  - 60                              '  逆时针60度
  CDGen_FowardDraw  - 0.7                               '  反方向绘制0.7个单位
  CDGen_SetDirection  120                              '  顺时针120度
  CDGen_FowardDraw  1.5                                '  绘制1.5个单位
  CDGen_SetDirection  120                              '  顺时针120度
  CDGen_FowardDraw  - 0.7                               '  反方向绘制0.7个单位
  CDGen_SetDirection  120                              '  顺时针120度
  CDGen_FowardDraw  0.7                                '  绘制0.7个单位
  End  Select
 CDGen_Flush X0, Y0
End Sub

Sub  CDGen_Blur()
 
'  对产生的位图进行柔化处理
  Dim  i, j
 
 
For  j  =  1  To  nPixelHeight  -  2
  
For  i  =  1  To  nCharCount  *  nPixelWidth  -  2
   
If  Buf(j, i)  =  0  Then
    
If  ((Buf(j, i  -  1 Or  Buf(j  +  1 , i))  And  1 <>  0  Then
     
'  如果当前点是空白点,且上下左右四个点中有一个点是有色点,则该点做柔化处理
     Buf(j, i)  =  2
    
End  If
   
End  If
  
Next
 
Next
End Sub

Sub  CDGen_NoisyDot()
 
'  对产生的位图进行噪点处理
  Dim  i, j, NoisyDot, CurDot
 
 
For  j  =  0  To  nPixelHeight  -  1
  
For  i  =  0  To  nCharCount  *  nPixelWidth  -  1
   
If  Buf(j, i)  <>  0  Then
    NoisyDot 
=  Int ( Rnd  *  Rnd  *  nMaxSaturation)
    
Select  Case  nColorNoisyDotOdds
    
Case  0
     CurDot 
=  nMaxSaturation
    
Case  1
     CurDot 
=  0
    
Case  Else
     CurDot 
=  NoisyDot
    
End  Select
    
If  Rnd  <  nColorNoisyDotOdds  Then  Buf(j, i)  =  CurDot  Else  Buf(j, i)  =  nMaxSaturation
   
Else
    NoisyDot 
=  Int ( Rnd  *  nMaxSaturation)
    
Select  Case  nBlankNoisyDotOdds
    
Case  0
     CurDot 
=  0
    
Case  1
     CurDot 
=  nMaxSaturation
    
Case  Else
     CurDot 
=  NoisyDot
    
End  Select
    
If  Rnd  <  nBlankNoisyDotOdds  Then  Buf(j, i)  =  CurDot  Else  Buf(j, i)  =  0
   
End  If
  
Next
 
Next
End Sub

Sub  CDGen()
 
'  生成位图阵列
  Dim  i, Ch
 
 DigtalStr 
=  ""
 CDGen_Clear
 
For  i  =  0  To  nCharCount  -  1
  Ch 
=  Mid (cCharSet,  Int ( Rnd  *  Len (cCharSet))  +  1 1 )
  DigtalStr 
=  DigtalStr  +  Ch
  CDGen_Char Ch, i 
*  nPixelWidth,  0
 
Next
 CDGen_Blur
 CDGen_NoisyDot
End Sub

Function  HSBToRGB(vH, vS, vB)
 
'  将颜色值由HSB转换为RGB
  Dim  aRGB( 3 ), RGB1st, RGB2nd, RGB3rd
 
Dim  nH, nS, nB
 
Dim  lH, nF, nP, nQ, nT

 vH 
=  (vH  Mod  360 )
 
If  vS  >  100  Then
  vS 
=  100
 
ElseIf  vS  <  0  Then
  vS 
=  0
 
End  If
 
If  vB  >  100  Then
  vB 
=  100
 
ElseIf  vB  <  0  Then
  vB 
=  0
 
End  If
 
If  vS  >  0  Then
  nH 
=  vH  /  60
  nS 
=  vS  /  100
  nB 
=  vB  /  100
  lH 
=  Int (nH)
  nF 
=  nH  -  lH
  nP 
=  nB  *  ( 1  -  nS)
  nQ 
=  nB  *  ( 1  -  nS  *  nF)
  nT 
=  nB  *  ( 1  -  nS  *  ( 1  -  nF))
  
Select  Case  lH
  
Case  0
   aRGB(
0 =  nB  *  255
   aRGB(
1 =  nT  *  255
   aRGB(
2 =  nP  *  255
  
Case  1
   aRGB(
0 =  nQ  *  255
   aRGB(
1 =  nB  *  255
   aRGB(
2 =  nP  *  255
  
Case  2
   aRGB(
0 =  nP  *  255
   aRGB(
1 =  nB  *  255   
   aRGB(
2 =  nT  *  255
  
Case  3
   aRGB(
0 =  nP  *  255
   aRGB(
1 =  nQ  *  255
   aRGB(
2 =  nB  *  255
  
Case  4
   aRGB(
0 =  nT  *  255
   aRGB(
1 =  nP  *  255
   aRGB(
2 =  nB  *  255
  
Case  5
   aRGB(
0 =  nB  *  255
   aRGB(
1 =  nP  *  255
   aRGB(
2 =  nQ  *  255
  
End  Select    
 
Else
  aRGB(
0 =  (vB  *  255 /  100
  aRGB(
1 =  aRGB( 0 )
  aRGB(
2 =  aRGB( 0 )
 
End  If
 HSBToRGB 
=  ChrB( Round (aRGB( 2 ),  0 ))  &  ChrB( Round (aRGB( 1 ),  0 ))  &  ChrB( Round (aRGB( 0 ),  0 ))
End Function

Sub  CreatValidCode(pSN)
 
Dim  i, j, CurColorHue
 
 
'  禁止缓存
 Response.Expires  =  - 9999
 Response.AddHeader 
" pragma " " no-cache "
 Response.AddHeader 
" cache-ctrol " " no-cache "
 Response.ContentType 
=  " image/bmp "
 
 
Call  CDGen
 Session(pSN) 
=  DigtalStr  ' 记录入Session

 
Dim  PicWidth, PicHeight, FileSize, PicDataSize
 PicWidth 
=  nCharCount  *  nPixelWidth
 PicHeight 
=  nPixelHeight
 PicDataSize 
=  PicWidth  *  PicHeight  *  3
 FileSize 
=  PicDataSize  +  54

 
'  输出BMP文件信息头
 Response.BinaryWrite ChrB( 66 &  ChrB( 77 &  _
  ChrB(FileSize 
Mod  256 &  ChrB((FileSize  \  256 Mod  256 &  ChrB((FileSize  \  256  \  256 Mod  256 &  ChrB(FileSize  \  256  \  256  \  256 &  _
  ChrB(
0 &  ChrB( 0 &  ChrB( 0 &  ChrB( 0 &  _
  ChrB(
54 &  ChrB( 0 &  ChrB( 0 &  ChrB( 0 )

 
'  输出BMP位图信息头
 Response.BinaryWrite ChrB( 40 &  ChrB( 0 &  ChrB( 0 &  ChrB( 0 &  _
  ChrB(PicWidth 
Mod  256 &  ChrB((PicWidth  \  256 Mod  256 &  ChrB((PicWidth  \  256  \  256 Mod  256 &  ChrB(PicWidth  \  256  \  256  \  256 &  _
  ChrB(PicHeight 
Mod  256 &  ChrB((PicHeight  \  256 Mod  256 &  ChrB((PicHeight  \  256  \  256 Mod  256 &  ChrB(PicHeight  \  256  \  256  \  256 &  _
  ChrB(
1 &  ChrB( 0 &  _
  ChrB(
24 &  ChrB( 0 &  _
  ChrB(
0 &  ChrB( 0 &  ChrB( 0 &  ChrB( 0 &  _
  ChrB(PicDataSize 
Mod  256 &  ChrB((PicDataSize  \  256 Mod  256 &  ChrB((PicDataSize  \  256  \  256 Mod  256 &  ChrB(PicDataSize  \  256  \  256  \  256 &  _
  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 )

 
'  逐点输出位图阵列
  If  nColorHue  =  - 1  Then
  CurColorHue 
=  Int ( Rnd  *  360 )
 
ElseIf  nColorHue  =  - 2  Then
  CurColorHue 
=  0
 
Else
  CurColorHue 
=  nColorHue
 
End  If
 
For  j  =  0  To  nPixelHeight  -  1
  
For  i  =  0  To  Len (DigtalStr)  *  nPixelWidth  -  1
   
If  nColorHue  =  - 2  Then
    Response.BinaryWrite HSBToRGB(CurColorHue, 
0 100  -  Buf(nPixelHeight  -  1  -  j, i))
   
Else
    Response.BinaryWrite HSBToRGB(CurColorHue, Buf(nPixelHeight 
-  1  -  j, i),  100 )
   
End  If
  
Next
 
Next
End Sub

%>

http://www.cnblogs.com/studio313/archive/2006/12/11/588905.html
 

转载于:https://www.cnblogs.com/gnidoal/archive/2012/04/13/2445243.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值