Red de conocimiento informático - Conocimiento de la instalación - Pídale a un profesional que lo codifique en C#

Pídale a un profesional que lo codifique en C#

Aquí tienes un código de verificación hecho en VB: puedes usarlo como plantilla para escribirlo

lt

Response.expires=-1

p>

Response.AddHeader "pragma", "no-cache"

Response.AddHeader "cache-control", "no-store"

Const nMaxSaturation = 100 ' Saturación máxima de color

Const nBlankNoisyDotOdds = 0,2 'Tasa de ruido en blanco

Const nColorNoisyDotOdds = 0,1 'Tasa de ruido de color

Const nCharCount = 5 'Número de caracteres generados Número

Const nPixelWidth = 20 'Ancho de un mapa de bits de un solo carácter

Const nPixelHeight = 20 'Alto de un mapa de bits de un solo carácter

Const nColorHue = 220 ' Mostrar el tono del código de verificación (-1 representa un tono aleatorio, -2 representa un tono en escala de grises)

Const nAngleRandom = 10 ' Cantidad aleatoria de ángulo

Const nLengthRandom = 10 ' Cantidad aleatoria de longitud (porcentaje)

Const cCharSet = "0123456789ABC"

' El conjunto de caracteres que constituye el código de verificación si se expande la siguiente biblioteca de vectores de letras

Dim Buf; (), DigtalStr

Dim Lines(), LineCount

Dim CursorX, CursorY, DirX, DirY

Aleatorio

Llamar a CreatValidCode( "GetCode")

Sub CDGen_Reset()

' Restablecer lápiz vectorial y variables de entorno

LineCount = 0

CursorX = 0

CursorY = 0

' La dirección inicial del lápiz óptico es verticalmente hacia abajo

DirX = 0

DirY = 1

End Sub

Sub CDGen_Clear()

' Borrar matriz de mapa de bits

Dim i, j

ReDim Buf(nPixelHeight - 1 , nCharCount * nPixelWidth - 1)

Para j = 0 a nPixelHeight - 1

Para i = 0 a nCharCount * nPixelWidth - 1

Buf(j, i) = 0

Siguiente

Siguiente

Fin Sub

Sub CDGen_PSet(X, Y)

' en su lugar Dibuja puntos en la matriz del gráfico

Buf(Y, X) = 1

End Sub

Sub CDGen_Line(X1, Y1, X2, Y2 )

' Dibujar líneas en una matriz de mapa de bits

D

im DX, DY, DeltaT, i

DX = X2 - X1

DY = Y2 - Y1

Si Abs(DX) gt; Entonces DeltaT = Abs(DX) Si no DeltaT = Abs(DY)

Para i = 0 a DeltaT

CDGen_PSet X1 DX*i/DeltaT, Y1 DY*i/DeltaT p>

Siguiente

End Sub

Sub CDGen_FowardDraw(nLength)

' Dibuja la longitud especificada de acuerdo con la dirección actual del lápiz y mueve el Un número positivo significa dibujar de izquierda a derecha/de arriba a abajo, un número negativo significa dibujar de derecha a izquierda/de abajo hacia arriba

nLongitud = Sgn(nLongitud) * Abs(nLongitud) * (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

Líneas(3, LineCount) = CursorY

LineCount = LineCount 1

End Sub

Sub CDGen_SetDirection(nAngle)

' Establecer de acuerdo con el ángulo especificado Dirección del pincel, un número positivo significa cambiar la dirección en el sentido de las agujas del reloj con respecto a la dirección actual, un número negativo significa cambiar la dirección en sentido antihorario con respecto a la dirección actual

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 )

' Mueve el cursor del lápiz al punto medio de la acción especificada, nPercent es el porcentaje de la posición media

Dim DeltaX, DeltaY

DeltaX = Líneas(2, nActionIndex) - Líneas(0, nActionIndex)

DeltaY = Líneas(3, nActionIndex) - Líneas( 1, nActionIndex)

C

ursorX = 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)

' Mueve el cursor del pincel al punto inicial de la acción especificada

CursorX = Líneas ( 0, nActionIndex)

CursorY = Lines(1, nActionIndex)

End Sub

Sub CDGen_Close(nActionIndex)

' Will el actual Cierre la posición del lápiz óptico con el punto inicial de la acción especificada y mueva el lápiz óptico

ReDim Preserve Lines(3, LineCount)

Lines(0, LineCount) = CursorX

Líneas (1, LineCount) = CursorY

CursorX = Líneas(0, nActionIndex)

CursorY = Líneas(1, nActionIndex)

Líneas(2, LineCount) = CursorX

Líneas(3, LineCount) = CursorY

LineCount = LineCount 1

End Sub

Sub CDGen_CloseToMiddle(nActionIndex, nPercent )

' Cierra el punto medio entre la posición actual del lápiz óptico y la acción especificada y mueve el lápiz óptico, nPercent es el porcentaje de la posición media

Dim DeltaX, DeltaY

ReDim Preserve Lines(3, LineCount)

Lines(0, LineCount) = CursorX

Lines(1, LineCount) = CursorY

DeltaX = Líneas(2, nActionIndex ) - Líneas(0, nActionIndex)

DeltaY = Líneas(3, nActionIndex) - Líneas(1, nActionIndex)

CursorX = Líneas(0, nActionIndex) Sgn(DeltaX) * Abs(DeltaX) * nPorcentaje / 100

CursorY = Líneas(1, nActionIndex) Sgn(DeltaY) * Abs(DeltaY) * nPorcentaje / 100

Líneas(2, LineCount) = CursorX

Líneas(3, LineCount) = CursorY

LineCount = LineCount 1

Fin Sub

>

Sub CDGen_Flush(X0, Y0)

' Dibuja una red de mapa de bits según la secuencia de acción del pincel actual

Dim MaxX, MinX, MaxY, MinY

Atenuar DeltaX, DeltaY, StepX, StepY, OffsetX, OffsetY

Atenuar i

MaxX = MinX = MaxY = MinY = 0

Para i = 0 A LineCount - 1

Si MaxX Líneas(0, i) Entonces MaxX = Líneas(0, i)

Si MaxX Líneas(2, i) Entonces MaxX = Líneas; (2, i)

Si MinX gt; Líneas(0, i) Entonces MinX = Líneas(0, i)

Si MinX Líneas(2, i) Entonces MinX; = Líneas(2, i)

If MaxY Líneas(1, i) Entonces MaxY = Líneas(1, i)

Si MaxY Líneas(3, i ) Entonces MaxY = Líneas(3, i)

Si MinY gt; i) Entonces MinY = Líneas(3, i)

Siguiente

DeltaX = MaxX - MinX

DeltaY = MaxY - MinY

Si DeltaX = 0 Entonces DeltaX = 1

Si DeltaY = 0 Entonces DeltaY = 1

MaxX = MinX

MaxY = MinY

Si DeltaX gt; DeltaY Entonces

StepX = (nPixelWidth - 2) / DeltaX

StepY = (nPixelHeight - 2) / DeltaX

OffsetX = 0 < / p>

OffsetY = (DeltaX - DeltaY) / 2

Else

StepX = (nPixelWidth - 2) / DeltaY

StepY = (nPixelHeight - 2) / DeltaY

OffsetX = (DeltaY - DeltaX) / 2

OffsetY = 0

Fin Si

For i = 0 A LineCount - 1

Líneas(0, i) = Ronda((Líneas(0, i) - MaxX OffsetX) * PasoX, 0)

Si Líneas(0, i ) lt; 0 Entonces Líneas(0, i) = 0

Si Líneas(0, i) gt = nPixelWidth - 2 Entonces Lin;

es(0, i) = nPixelWidth - 3

Lines(1, i) = Round((Lines(1, i) - MaxY OffsetY) * StepY, 0)

If Líneas(1, i) <0 Entonces Líneas(1, i) = 0

Si Líneas(1, i)

Líneas(2, i) = Ronda((Líneas( 2, i) - MinX OffsetX) * StepX, 0)

Si Líneas(2, i) lt; Entonces Líneas (2, i) = 0

Si Líneas(2; , i) gt; = nPixelWidth - 2 Then Lines(2, i) = nPixelWidth - 3

Lines(3, i ) = Round((Lines(3, i) - MinY OffsetY) * StepY, 0)

Si Líneas(3, i) lt; 0 Entonces Líneas(3, i) = 0

Si Líneas(3, i) >= nPixelHeight - 2 Entonces Líneas( 3, i) = nPixelHeight - 3

CDGen_Line Líneas(0, i) X0 1, Líneas(1, i) Y0 1, Líneas(2, i) X0 1, Líneas(3, i) Y0 1

Siguiente

End Sub

Sub CDGen_Char(cChar, X0 , Y0)

' Genera una matriz de mapa de bits de caracteres especificados en coordenadas especificadas

CDGen_Reset

Seleccione Case cChar

Case "0 "

CDGen_SetDirection -60 ' 60 grados en sentido antihorario (en relación con la vertical línea)

CDGen_FowardDraw -0.7 ' Dibuja 0.7 unidades en la dirección opuesta

CDGen_SetDirection -60 ' 60 grados en sentido antihorario

CDGen_FowardDraw -0.7 'Dibuja 0.7 unidades en la dirección opuesta

CDGen_SetDirection 120' 120 grados en sentido horario

CDGen_FowardDraw 1.5' Dibujar 1.5 unidades

CDGen_SetDirection -60' 60 grados en sentido antihorario

CDGen_FowardDraw 0.7 ' Dibujar 0.7 unidades

CDGen_SetDirection -60 ' 120 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 0.7 'Dibujar 0.7 unidades

CDGen_Close 0 'Cerrar el lápiz actual y el lápiz 0 (comenzando en 0)

Caso "1"

CDGen_SetDirection -90 ' 90 grados en sentido antihorario (en relación con la vertical)

CDGen_

FowardDraw 0.5' Dibujar 0.5 unidades

CDGen_MoveToMiddle 0, 50' Mueve la posición del pincel a la posición 50 del trazo 0 (comenzando desde 0)

CDGen_SetDirection 90' En sentido antihorario 90 grados

p>

CDGen_FowardDraw -1.4 'Dibuja 1.4 unidades en la dirección opuesta

CDGen_SetDirection 30 '30 grados en sentido antihorario

CDGen_FowardDraw 0.4 'Dibuja 0.4 unidades

Caso "2"

CDGen_SetDirection 45 ' 45 grados en el sentido de las agujas del reloj (en relación con la línea vertical)

CDGen_FowardDraw -0.7 ' Dibuja 0,7 unidades en la dirección opuesta

CDGen_SetDirection - 120 ' 120 grados en sentido antihorario

CDGen_FowardDraw 0.4 ' Dibujar 0.4 unidades

CDGen_SetDirection 60 ' 60 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 0.6 ' Dibujar 0.6 unidades

p>

CDGen_SetDirection 60' 60 grados en sentido horario

CDGen_FowardDraw 1.6' Dibujar 1.6 unidades

CDGen_SetDirection -135' 135 grados en sentido antihorario

CDGen_FowardDraw 1.0 ' Dibujar 1,0 unidades

Caso "3"

CDGen_SetDirection -90 ' 90 grados en sentido antihorario (en relación con la línea vertical)

CDGen_FowardDraw 0.8 ' Dibujar 0.8 unidades Unidades

CDGen_SetDirection 135 '135 grados en sentido horario

CDGen_FowardDraw 0.8 'Dibujo 0.8 unidades

CDGen_SetDirection -120 '120 grados en sentido antihorario

CDGen_FowardDraw 0.6' Dibujar 0.6 unidades

CDGen_SetDirection 80' 80 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 0.5' Dibujar 0.5 unidades

CDGen_SetDirection 60' 60 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 0.5' Dibujar 0.5 unidades

CDGen_SetDirection 60' Sentido horario 60 grados

CDGen_FowardDraw 0.5' Dibujar 0.5 unidades

Caso "4"

CDGen_SetDirection 20 ' 20 grados en el sentido de las agujas del reloj (en relación con la línea vertical)

CDGen_FowardDraw 0.8 ' Dibujar 0.8 unidades

CDGen_SetDirection -110 ' En el sentido contrario a las agujas del reloj 110 grados

CDGen_FowardDraw 1.2 'Dibuja 1.2 unidades

CDGen_MoveToMiddle 1, 60 'Mueve la posición del pincel a la posición 60 del primer trazo (comenzando en 0)

CDGen_S

etDirection 90 '90 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 0.7 'Dibuja 0.7 unidades

CDGen_MoveCursor 2 'Mueve el pincel al comienzo del segundo trazo (comenzando en 0)

CDGen_FowardDraw -1.5 ' Dibuja 1,5 unidades en la dirección opuesta

Caso "5"

CDGen_SetDirection 90 ' 90 grados en el sentido de las agujas del reloj (en relación con la línea vertical)

CDGen_FowardDraw 1.0 'Dibuja 1.0 unidades

CDGen_SetDirection -90 '90 grados en sentido antihorario

CDGen_FowardDraw 0.8 'Dibuja 0,8 unidades

CDGen_SetDirection -90 '90 grados en sentido antihorario

CDGen_FowardDraw 0.8' Dibujar 0.8 unidades

CDGen_SetDirection 30' 30 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 0.4' Dibujar 0.4 unidades

CDGen_SetDirection 60' 60 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 0.4 ' Dibujar 0.4 unidades

CDGen_SetDirection 30 ' 30 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 0.5 ' Dibujar 0.5 unidades

p>

CDGen_SetDirection 60 ' 60 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 0.8 ' Dibujar 0.8 unidades

Caso "6"

CDGen_SetDirection -60 ' En el sentido contrario a las agujas del reloj 60 grados (en relación con la línea vertical )

CDGen_FowardDraw -0.7 ' Dibuja 0.7 unidades en la dirección opuesta

CDGen_SetDirection -60 ' 60 grados en sentido antihorario

CDGen_FowardDraw -0.7 ' Dibuja 0.7 unidades en la dirección opuesta dirección

CDGen_SetDirection 120' 120 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 1.5' Dibujar 1.5 unidades

CDGen_SetDirection 120' 120 grados en el sentido de las agujas del reloj

CDGen_FowardDraw -0.7 'Dibuja 0,7 unidades en la dirección opuesta

CDGen_SetDirection 120 '120 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 0.7 'Dibuja 0,7 unidades

CDGen_SetDirection 120 ' 120 grados en el sentido de las agujas del reloj

CDGen_FowardDraw -0.7 ' Dibuja 0.7 unidades en la dirección opuesta

CDGen_SetDirection 120 ' 120 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 0.5 ' Dibuja 0.5 unidades

CDGen_CloseToMiddle 2 , 50' Cierra la posición actual del pincel a 50 del segundo trazo (comenzando desde 0)

Caso "7"

CDGen_SetDi

reacción 180 '180 grados en el sentido de las agujas del reloj (en relación con la línea vertical)

CDGen_FowardDraw 0.3 'Dibujar 0.3 unidades

CDGen_SetDirection 90 '90 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 0.9 'Dibujar 0.9 unidades

CDGen_SetDirection 120' 120 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 1.3' Dibujar 1.3 unidades

Caso "8"

CDGen_SetDirection -60' 60 grados en sentido antihorario (en relación con la línea vertical)

CDGen_FowardDraw -0.8 ' Dibuja 0,8 unidades en la dirección opuesta

CDGen_SetDirection -60 ' 60 grados en sentido antihorario

CDGen_FowardDraw -0.8 'Dibuja 0.8 unidades en la dirección opuesta

CDGen_SetDirection 120 '120 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 0.8 'Dibuja 0.8 unidades

CDGen_SetDirection 110 '110 grados en el sentido de las agujas del reloj

CDGen_FowardDraw -1.5 'Dibuja 1.5 unidades en la dirección opuesta

CDGen_SetDirection -110 '110 grados en sentido antihorario

CDGen_FowardDraw 0.9 'Dibuja 0.9 unidades

CDGen_SetDirection 60 ' 60 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 0.8 ' Dibujar 0.8 unidades

CDGen_SetDirection 60 ' 60 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 0.8 ' Dibujar 0.8 unidades

CDGen_SetDirection 60' 60 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 0.9' Dibujar 0.9 unidades

CDGen_SetDirection 70' 70 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 1.5' Dibujar 1.5 unidades

CDGen_Close 0 'Cierra el lápiz actual y el lápiz 0 (comenzando en 0)

Caso "9"

CDGen_SetDirection 120 ' 60 grados en sentido antihorario (en relación con la vertical línea)

CDGen_FowardDraw -0.7 ' Dibuja 0.7 unidades en la dirección opuesta

CDGen_SetDirection -60 ' 60 grados en sentido antihorario

p>

CDGen_FowardDraw -0.7 'Dibuja 0.7 unidades en la dirección opuesta

CDGen_SetDirection -60' 120 grados en el sentido de las agujas del reloj

CDGen_FowardDraw -1.5' Dibujar 1,5 unidades

CDGen_SetDirection -60' 120 grados en el sentido de las agujas del reloj

CDGen_FowardDraw -0.7 'Dibuja 0.7 unidades en la dirección opuesta

CDGen_SetDirection -60 '120 grados en el sentido de las agujas del reloj

C

DGen_FowardDraw -0.7 'Dibuja 0.7 unidades

CDGen_SetDirection 120 '120 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 0.7 'Dibuja 0.7 unidades en la dirección opuesta

CDGen_SetDirection -60 'En el sentido de las agujas del reloj mano 120 grados

CDGen_FowardDraw 0.5 ' Dibuja 0.5 unidades

CDGen_CloseToMiddle 2, 50 ' Cierra la posición actual del lápiz hasta el punto 50 del segundo trazo (comenzando en 0)

' La siguiente es la acción vectorial de las letras, si estás interesado, puedes continuar

Caso "A"

CDGen_SetDirection -(Rnd * 20 150) ' En sentido antihorario 150 -170 grados (en relación con la línea vertical)

CDGen_FowardDraw Rnd * 0.2 1.1 ' Dibujar 1.1-1.3 unidades

CDGen_SetDirection Rnd * 20 140 ' 140-160 grados en el sentido de las agujas del reloj

CDGen_FowardDraw Rnd * 0.2 1.1 'Dibuja 1.1-1.3 unidades

CDGen_MoveToMiddle 0, 30 'Mueve la posición del pincel a la posición 30 del primer trazo (comenzando desde 0)

CDGen_CloseToMiddle 1, 70 ' Cierra los 70 puntos entre la posición actual del pincel y el primer trazo (comenzando en 0)

Caso "B"

CDGen_SetDirection -(Rnd * 20 50) ' En sentido contrario a las agujas del reloj 50-70 grados (en relación con la línea vertical)

CDGen_FowardDraw Rnd * 0.4 0.8 ' Dibujar 0.8-1.2 unidades

CDGen_SetDirection Rnd * 20 110 ' 110-130 grados en sentido horario

CDGen_FowardDraw Rnd * 0.2 0.6 ' Dibujar 0.6-0.8 unidades

CDGen_SetDirection -(Rnd * 20 110) ' En sentido antihorario 110-130 grados

CDGen_FowardDraw Rnd * 0.2 0.6 'Dibujar 0.6- 0.8 unidades

CDGen_SetDirection Rnd * 20 110 '110-130 grados en el sentido de las agujas del reloj

CDGen_FowardDraw Rnd * 0.4 0.8 'Dibujar 0.8-1.2 unidades

CDGen_Close 0 ' Cierra el lápiz actual y el primer lápiz (comenzando en 0)

Caso "C"

CDGen_SetDirection -60 ' 60 grados en sentido antihorario (en relación con la línea vertical)

CDGen_FowardDraw -0.7 ' Dibuja 0.7 unidades en la dirección opuesta

CDGen_SetDirection -60 ' 60 grados en sentido antihorario

CDGen_FowardDraw -0.7 ' Dibuja 0.7 unidades en la dirección opuesta

CDGen_SetDirection 120 '120 grados en el sentido de las agujas del reloj

CDGen_FowardDraw 1.5

' Dibujar 1,5 unidades

CDGen_SetDirection 120 '120 grados en el sentido de las agujas del reloj

CDGen_FowardDraw -0.7 'Dibujar 0,7 unidades en la dirección opuesta

CDGen_SetDirection 120 '120 grados en el sentido de las agujas del reloj

p>

CDGen_FowardDraw 0.7 'Dibuja 0.7 unidades

'Agregue más conjuntos de caracteres, modifique el valor del atributo de cCharSet en consecuencia

End Select

CDGen_Flush X0 , Y0

End Sub

Sub CDGen_Blur()

' Suaviza el mapa de bits generado

Dim i, j

Para j = 1 a nPixelHeight - 2

Para i = 1 a nCharCount * nPixelWidth - 2

Si Buf(j, i) = 0 entonces

If ((Buf(j, i - 1) or Buf(j 1, i)) And 1) lt;gt; 0 Then

' Si el punto actual es Puntos en blanco y uno de los cuatro puntos arriba, abajo, izquierda y derecha son puntos coloreados, entonces el punto se suavizará

Buf(j, i) = 2

End If

End If

Siguiente

Siguiente

End Sub

Sub CDGen_NoisyDot()

' Realizar ruido procesamiento en el mapa de bits generado

Dim i, j, NoisyDot, CurDot

Para j = 0 a nPixelHeight - 1

Para i = 0 a nCharCount * nPixelWidth - 1

Si Buf(j, i) lt;gt; 0 Entonces

NoisyDot = Int(Rnd * Rnd * nMaxSaturation)

Seleccione Case nColorNoisyDotOdds

Caso 0

CurDot = nMaxSaturation

Caso 1

CurDot = 0

Caso más

CurDot = NoisyDot

End Select

Si Rnd lt; nColorNoisyDotOdds Then Buf(j, i) = CurDot Else Buf(j, i) = nMaxSaturation

Else

NoisyDot = Int(Rnd * nMaxSaturation)

Seleccione caso nBlankNoisyDotOdds

Caso 0

CurDot = 0

Caso 1

CurDot = nMaxSaturation

Caso más

CurDot = NoisyDot

Selección final

p>

Si Rnd lt; nBlankNoisyDotOdds Then Buf(j, i) = CurDot Else Buf(j, i) = 0

Fin

Siguiente

Siguiente

End Sub

Sub CDGen()

' Generar matriz de mapa de bits

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

Siguiente

CDGen_Blur

p>

CDGen_NoisyDot

End Sub

Función HSBToRGB(vH, vS, vB)

' Convierte el valor de color de HSB a RGB

Atenuar aRGB(3), RGB1st, RGB2nd, RGB3rd

Atenuar nH, nS, nB

Atenuar lH, nF, nP, nQ, nT

vH = (vH Mod 360)

Si vS gt; entonces

vS = 100

ElseIf vS lt; /p>

vS = 0

Fin si

Si vB gt 100 Entonces

vB = 100

ElseIf vB; lt; 0 Entonces

vB = 0

Fin Si

Si vS gt 0 Entonces

nH = vH / 60

p>

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))

Seleccione el caso lH

Caso 0

aRGB(0) = nB * 255

aRGB(1) = nT * 255

p>

aRGB(2) = nP * 255

Caso 1

aRGB(0) = nQ * 255

aRGB(1) = nB * 255

aRGB(2) = nP * 255

Caso 2

aRGB(0) = nP * 255

aRGB( 1) = nB * 255

aRGB(2) = nT * 255

Caso 3

aRGB(0) = nP * 255

<

p>aRGB(1) = nQ * 255

aRGB(2) = nB * 255

Caso 4

aRGB(0) = nT * 255

aRGB(1) = nP * 255

aRGB(2) = nB * 255

Caso 5

aRGB(0) = nB * 255

aRGB(1) = nP * 255

aRGB(2) = nQ * 255

Finalizar selección

De lo contrario

aRGB(0) = (vB * 255) / 100

aRGB(1) = aRGB(0)

aRGB(2) = aRGB(0 )

Finalizar si

HSBToRGB = ChrB(Round(aRGB(2), 0)) amp ChrB(Round(aRGB(1), 0)) amp; (aRGB(0), 0))

Función final

Sub CreatValidCode(pSN)

Dim i, j, CurColorHue

' Deshabilitar el almacenamiento en caché

Response.Expires = -9999

Response.AddHeader "pragma", "no-cache"

Response.AddHeader "cache-ctrol" , "no-cache"

Response.ContentType = "image/bmp"

Llamar a CDGen

Session(pSN) = DigtalStr 'Grabar en sesión

p>

Dim PicWidth, PicHeight, FileSize, PicDataSize

PicWidth = nCharCount * nPixelWidth

PicHeight = nPixelHeight

PicDataSize = PicWidth * PicHeight * 3

FileSize = PicDataSize 54

' Encabezado de información del archivo BMP de salida

Response.BinaryWrite ChrB(66) amp ChrB(77) amp; _

ChrB(FileSize Mod 256) y ChrB((FileSize \ 256) Mod 256) y ChrB((FileSize \ 256 \ 256) Mod 256) y

ChrB; (0) amplificador; ChrB(0) amplificador; ChrB(0) amplificador; (0)

'Encabezado de información de mapa de bits BMP de salida

Response.BinaryWrite ChrB(40

) amplificador; ChrB(0) amplificador; ChrB(0) amplificador; _

ChrB(PicWidth Mod 256) & ChrB; (PicWidth \ 256 \ 256 \ 256) & ) amplificador ChrB ((PicHeight \ 256 \ 256) Mod 256) amplificador

ChrB(24) amplificador; >

ChrB(0) y ChrB(0) y ChrB(0) y ChrB((PicDataSize \ 256) Mod 256) & ChrB((PicDataSize \ 256 \ 256) Mod 256) amp; \ 256) amp _

ChrB(18) amp; (0) amplificador _

ChrB(18) amplificador; ChrB(11) amplificador; ; ChrB(0) amplificador; ChrB(0) amplificador; ChrB(0) amplificador; /p>

' Salida de matriz de mapa de bits punto por punto

Si nColorHue = -1 Entonces

CurColorHue = Int(Rnd * 360)

ElseIf nColorHue = -2 Entonces

CurColorHue = 0

Si no

CurColorHue = nColorHue

Fin

Para j = 0 a nPixelHeight - 1

Para i = 0 a Len(DigtalStr) * nPixelWidth - 1

Si nColorHue = -2 entonces

Response.BinaryWrite HSBToRGB (CurColorHue, 0, 100 - Buf(nPixelHeight - 1 - j, i))

Else

Response.BinaryWrite HSBToRGB(CurColorHue, Buf(nPixelHeight - 1 - j, i) , 100)

Finalizar si

Siguiente

Siguiente

Fin Sub

gt;