zoukankan      html  css  js  c++  java
  • 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 050                          ' 移动画笔的位置到第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 160                          ' 移动画笔的位置到第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 250                         ' 将当前画笔位置与第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 250                         ' 将当前画笔位置与第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 030                          ' 移动画笔的位置到第1笔(0开始)的30%处
      CDGen_CloseToMiddle 170                         ' 将当前画笔位置与第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 - 1Or 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)) + 11)
      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 \ 256Mod 256& ChrB((FileSize \ 256 \ 256Mod 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 \ 256Mod 256& ChrB((PicWidth \ 256 \ 256Mod 256& ChrB(PicWidth \ 256 \ 256 \ 256& _
      ChrB(PicHeight 
    Mod 256& ChrB((PicHeight \ 256Mod 256& ChrB((PicHeight \ 256 \ 256Mod 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 \ 256Mod 256& ChrB((PicDataSize \ 256 \ 256Mod 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, 
    0100 - Buf(nPixelHeight - 1 - j, i))
       
    Else
        Response.BinaryWrite HSBToRGB(CurColorHue, Buf(nPixelHeight 
    - 1 - j, i), 100)
       
    End If
      
    Next
     
    Next
    End Sub
    %
    >

  • 相关阅读:
    ES6语法记录
    关于Vue中 render: h => h(App) 的具体含义的理解
    在Vue中结合render函数渲染指定组件
    访问者模式(Visitor)_java实现
    自底向上集成 Bottom-Up
    基于功能集成 Function-Based
    分层集成(线性关系) Layers
    持续集成(高频集成、每日集成) Continuous/High-frequency
    Selenium实现点击click()
    Selenium自动化之点击下拉框选项操作
  • 原文地址:https://www.cnblogs.com/studio313/p/588905.html
Copyright © 2011-2022 走看看