vCode.asp
上传用户:jisenq
上传日期:2014-06-29
资源大小:7216k
文件大小:20k
源码类别:

数据库编程

开发平台:

ASP/ASPX

  1. <%
  2. Option Explicit
  3. Response.Expires = -1
  4. Response.ExpiresAbsolute = Now() - 1
  5. Response.Expires = 0
  6. Response.CacheControl = "no-cache"
  7. Const nSaturation = 225
  8. Const nBlankNoisyDotOdds = 1.0
  9. Const nColorNoisyDotOdds = 1.0
  10. Const nNoisyLineCount = 2
  11. Const nCharMin = 4
  12. Const nCharMax = 5
  13. Const nSpaceX = 2
  14. Const nSpaceY = 2
  15. Const nImgWidth = 60
  16. Const nImgHeight = 14
  17. Const nCharWidthRandom = 16
  18. Const nCharHeightRandom = 16
  19. Const nPositionXRandom = 10
  20. Const nPositionYRandom = 10
  21. Const nAngleRandom = 2 
  22. Const nLengthRandom = 2
  23. Const nColorHue = -1
  24. Const cCharSet = "0123456789"
  25. Randomize
  26. Dim tmp_X_1_,tmp_Y_1_,tmp_X_2_,tmp_Y_2_,tmp_n_CharC_,tmp_n_PW_,tmp_n_PH_,tmp_Pw_1_,tmp_PH_2_,str_Bur(), str_Digtal,Lines(),LineCount
  27. tmp_n_CharC_ = nCharMin + CInt(Rnd * (nCharMax - nCharMin))
  28. tmp_Pw_1_ = nImgWidth + 2 * nSpaceX
  29. tmp_PH_2_ = nImgHeight + 2 * nSpaceY
  30. call CreatValidCode("GetCode")
  31. sub CDGen_Reset()
  32. LineCount = 0
  33. tmp_X_1_ = 0
  34. tmp_Y_1_ = 0
  35. tmp_X_2_ = 0
  36. tmp_Y_2_ = 1
  37. end sub
  38. sub CDGen_Clear()
  39. Dim i, j
  40. ReDim str_Bur(tmp_PH_2_ - 1, tmp_Pw_1_ - 1)
  41. for j = 0 To tmp_PH_2_ - 1
  42. For i = 0 To tmp_Pw_1_ - 1
  43. str_Bur(j, i) = 0
  44. next
  45. next
  46. End Sub
  47. sub Get_Position(X, Y)
  48. If X >= 0 and X < tmp_Pw_1_ and Y >= 0 and Y < tmp_PH_2_ Then str_Bur(Y, X) = 1
  49. end sub
  50. sub Get_Pline(X1, Y1, X2, Y2)
  51. dim DX, DY, DeltaT, i
  52. DX = X2 - X1
  53. DY = Y2 - Y1
  54. If Abs(DX) > Abs(DY) Then DeltaT = Abs(DX) Else DeltaT = Abs(DY)
  55. If DeltaT = 0 Then
  56. Get_Position CInt(X1),CInt(Y1)
  57. Else
  58. For i = 0 To DeltaT
  59. Get_Position CInt(X1 + DX * i / DeltaT), CInt(Y1 + DY * i / DeltaT)
  60. Next
  61. End If
  62. end sub
  63. sub CDGen_FowardDraw(nLength)
  64. nLength = nLength * (1 + (Rnd * 2 - 1) * nLengthRandom / 100)
  65. ReDim Preserve Lines(3, LineCount)
  66. Lines(0, LineCount) = tmp_X_1_
  67. Lines(1, LineCount) = tmp_Y_1_
  68. tmp_X_1_ = tmp_X_1_ + tmp_X_2_ * nLength
  69. tmp_Y_1_ = tmp_Y_1_ + tmp_Y_2_ * nLength
  70. Lines(2, LineCount) = tmp_X_1_
  71. Lines(3, LineCount) = tmp_Y_1_
  72. LineCount = LineCount + 1
  73. end sub
  74. sub CDGen_SetDirection(nAngle)
  75. Dim DX, DY
  76. nAngle = (nAngle + (Rnd * 2 - 1) * nAngleRandom) / 180 * 3.1415926
  77. DX = tmp_X_2_
  78. DY = tmp_Y_2_
  79. tmp_X_2_ = DX * Cos(nAngle) - DY * Sin(nAngle)
  80. tmp_Y_2_ = DX * Sin(nAngle) + DY * Cos(nAngle)
  81. end sub
  82. sub CDGen_MoveToMiddle(nActionIndex, nPercent)
  83. Dim DeltaX, DeltaY
  84. DeltaX = Lines(2, nActionIndex) - Lines(0, nActionIndex)
  85. DeltaY = Lines(3, nActionIndex) - Lines(1, nActionIndex)
  86. tmp_X_1_ = Lines(0, nActionIndex) + DeltaX * nPercent / 100
  87. tmp_Y_1_ = Lines(1, nActionIndex) + DeltaY * Abs(DeltaY) * nPercent / 100
  88. end sub
  89. sub CDGen_MoveCursor(nActionIndex)
  90. tmp_X_1_ = Lines(0, nActionIndex)
  91. tmp_Y_1_ = Lines(1, nActionIndex)
  92. end sub
  93. sub CDGen_Close(nActionIndex)
  94. ReDim Preserve Lines(3, LineCount)
  95. Lines(0, LineCount) = tmp_X_1_
  96. Lines(1, LineCount) = tmp_Y_1_
  97. tmp_X_1_ = Lines(0, nActionIndex)
  98. tmp_Y_1_ = Lines(1, nActionIndex)
  99. Lines(2, LineCount) = tmp_X_1_
  100. Lines(3, LineCount) = tmp_Y_1_
  101. LineCount = LineCount + 1
  102. end sub
  103. sub CDGen_CloseToMiddle(nActionIndex, nPercent)
  104. Dim DeltaX, DeltaY
  105. ReDim Preserve Lines(3, LineCount)
  106. Lines(0, LineCount) = tmp_X_1_
  107. Lines(1, LineCount) = tmp_Y_1_
  108. DeltaX = Lines(2, nActionIndex) - Lines(0, nActionIndex)
  109. DeltaY = Lines(3, nActionIndex) - Lines(1, nActionIndex)
  110. tmp_X_1_ = Lines(0, nActionIndex) + Sgn(DeltaX) * Abs(DeltaX) * nPercent / 100
  111. tmp_Y_1_ = Lines(1, nActionIndex) + Sgn(DeltaY) * Abs(DeltaY) * nPercent / 100
  112. Lines(2, LineCount) = tmp_X_1_
  113. Lines(3, LineCount) = tmp_Y_1_
  114. LineCount = LineCount + 1
  115. end sub
  116. sub CDGen_Flush(X0, Y0)
  117. Dim MaxX, MinX, MaxY, MinY
  118. Dim DeltaX, DeltaY, StepX, StepY, OffsetX, OffsetY
  119. Dim i
  120. MaxX = MinX = MaxY = MinY = 0
  121. For i = 0 To LineCount - 1
  122. If MaxX < Lines(0, i) Then MaxX = Lines(0, i)
  123. If MaxX < Lines(2, i) Then MaxX = Lines(2, i)
  124. If MinX > Lines(0, i) Then MinX = Lines(0, i)
  125. If MinX > Lines(2, i) Then MinX = Lines(2, i)
  126. If MaxY < Lines(1, i) Then MaxY = Lines(1, i)
  127. If MaxY < Lines(3, i) Then MaxY = Lines(3, i)
  128. If MinY > Lines(1, i) Then MinY = Lines(1, i)
  129. If MinY > Lines(3, i) Then MinY = Lines(3, i)
  130. next
  131. DeltaX = MaxX - MinX
  132. DeltaY = MaxY - MinY
  133. If DeltaX = 0 Then DeltaX = 1
  134. If DeltaY = 0 Then DeltaY = 1
  135. MaxX = MinX
  136. MaxY = MinY
  137. If DeltaX > DeltaY Then
  138. StepX = (tmp_n_PW_ - 2) / DeltaX
  139. StepY = (tmp_n_PH_ - 2) / DeltaX
  140. OffsetX = 0
  141. OffsetY = (DeltaX - DeltaY) / 2
  142. Else
  143. StepX = (tmp_n_PW_ - 2) / DeltaY
  144. StepY = (tmp_n_PH_ - 2) / DeltaY
  145. OffsetX = (DeltaY - DeltaX) / 2
  146. OffsetY = 0
  147. End If
  148. For i = 0 To LineCount - 1
  149. Lines(0, i) = Round((Lines(0, i) - MaxX + OffsetX) * StepX, 0)
  150. Lines(1, i) = Round((Lines(1, i) - MaxY + OffsetY) * StepY, 0)
  151. Lines(2, i) = Round((Lines(2, i) - MinX + OffsetX) * StepX, 0)
  152. Lines(3, i) = Round((Lines(3, i) - MinY + OffsetY) * StepY, 0)
  153. Get_Pline Lines(0, i) + X0 + 1, Lines(1, i) + Y0 + 1, Lines(2, i) + X0 + 1, Lines(3, i) + Y0 + 1
  154. Next
  155. end sub
  156. Sub CDGen_Char(cChar, X0, Y0)
  157. CDGen_Reset
  158. Select Case cChar
  159. Case "0"
  160. CDGen_SetDirection -60                            ' 逆时针60度(相对于垂直线)
  161. CDGen_FowardDraw -0.7                             ' 反方向绘制0.7个单位
  162. CDGen_SetDirection -60                            ' 逆时针60度
  163. CDGen_FowardDraw -0.7                             ' 反方向绘制0.7个单位
  164. CDGen_SetDirection 120                            ' 顺时针120度
  165. CDGen_FowardDraw 1.5                              ' 绘制1.5个单位
  166. CDGen_SetDirection -60                            ' 逆时针60度
  167. CDGen_FowardDraw 0.7                              ' 绘制0.7个单位
  168. CDGen_SetDirection -60                            ' 顺时针120度
  169. CDGen_FowardDraw 0.7                              ' 绘制0.7个单位
  170. CDGen_Close 0                                     ' 封闭当前笔与第0笔(0开始)
  171. Case "1"
  172. CDGen_SetDirection -90                            ' 逆时针90度(相对于垂直线)
  173. CDGen_FowardDraw 0.5                              ' 绘制0.5个单位
  174. CDGen_MoveToMiddle 0, 50                          ' 移动画笔的位置到第0笔(0开始)的50%处
  175. CDGen_SetDirection 90                             ' 逆时针90度
  176. CDGen_FowardDraw -1.4                             ' 反方向绘制1.4个单位
  177. CDGen_SetDirection 30                             ' 逆时针30度
  178. CDGen_FowardDraw 0.4                              ' 绘制0.4个单位
  179. Case "2"
  180. CDGen_SetDirection 45                             ' 顺时针45度(相对于垂直线)
  181. CDGen_FowardDraw -0.7                             ' 反方向绘制0.7个单位
  182. CDGen_SetDirection -120                           ' 逆时针120度
  183. CDGen_FowardDraw 0.4                              ' 绘制0.4个单位
  184. CDGen_SetDirection 60                             ' 顺时针60度
  185. CDGen_FowardDraw 0.6                              ' 绘制0.6个单位
  186. CDGen_SetDirection 60                             ' 顺时针60度
  187. CDGen_FowardDraw 1.6                              ' 绘制1.6个单位
  188. CDGen_SetDirection -135                           ' 逆时针135度
  189. CDGen_FowardDraw 1.0                              ' 绘制1.0个单位
  190. Case "3"
  191. CDGen_SetDirection -90                            ' 逆时针90度(相对于垂直线)
  192. CDGen_FowardDraw 0.8                              ' 绘制0.8个单位
  193. CDGen_SetDirection 135                            ' 顺时针135度
  194. CDGen_FowardDraw 0.8                              ' 绘制0.8个单位
  195. CDGen_SetDirection -120                           ' 逆时针120度
  196. CDGen_FowardDraw 0.6                              ' 绘制0.6个单位
  197. CDGen_SetDirection 80                             ' 顺时针80度
  198. CDGen_FowardDraw 0.5                              ' 绘制0.5个单位
  199. CDGen_SetDirection 60                             ' 顺时针60度
  200. CDGen_FowardDraw 0.5                              ' 绘制0.5个单位
  201. CDGen_SetDirection 60                             ' 顺时针60度
  202. CDGen_FowardDraw 0.5                              ' 绘制0.5个单位
  203. Case "4"
  204. CDGen_SetDirection 20                             ' 顺时针20度(相对于垂直线)
  205. CDGen_FowardDraw 0.8                              ' 绘制0.8个单位
  206. CDGen_SetDirection -110                           ' 逆时针110度
  207. CDGen_FowardDraw 1.2                              ' 绘制1.2个单位
  208. CDGen_MoveToMiddle 1, 60                          ' 移动画笔的位置到第1笔(0开始)的60%处
  209. CDGen_SetDirection 90                             ' 顺时针90度
  210. CDGen_FowardDraw 0.7                              ' 绘制0.7个单位
  211. CDGen_MoveCursor 2                                ' 移动画笔到第2笔(0开始)的开始处
  212. CDGen_FowardDraw -1.5                             ' 反方向绘制1.5个单位
  213. Case "5"
  214. CDGen_SetDirection 90                             ' 顺时针90度(相对于垂直线)
  215. CDGen_FowardDraw 1.0                              ' 绘制1.0个单位
  216. CDGen_SetDirection -90                            ' 逆时针90度
  217. CDGen_FowardDraw 0.8                              ' 绘制0.8个单位
  218. CDGen_SetDirection -90                            ' 逆时针90度
  219. CDGen_FowardDraw 0.8                              ' 绘制0.8个单位
  220. CDGen_SetDirection 30                             ' 顺时针30度
  221. CDGen_FowardDraw 0.4                              ' 绘制0.4个单位
  222. CDGen_SetDirection 60                             ' 顺时针60度
  223. CDGen_FowardDraw 0.4                              ' 绘制0.4个单位
  224. CDGen_SetDirection 30                             ' 顺时针30度
  225. CDGen_FowardDraw 0.5                              ' 绘制0.5个单位
  226. CDGen_SetDirection 60                             ' 顺时针60度
  227. CDGen_FowardDraw 0.8                              ' 绘制0.8个单位
  228. Case "6"
  229. CDGen_SetDirection -60                            ' 逆时针60度(相对于垂直线)
  230. CDGen_FowardDraw -0.7                             ' 反方向绘制0.7个单位
  231. CDGen_SetDirection -60                            ' 逆时针60度
  232. CDGen_FowardDraw -0.7                             ' 反方向绘制0.7个单位
  233. CDGen_SetDirection 120                            ' 顺时针120度
  234. CDGen_FowardDraw 1.5                              ' 绘制1.5个单位
  235. CDGen_SetDirection 120                            ' 顺时针120度
  236. CDGen_FowardDraw -0.7                             ' 反方向绘制0.7个单位
  237. CDGen_SetDirection 120                            ' 顺时针120度
  238. CDGen_FowardDraw 0.7                              ' 绘制0.7个单位
  239. CDGen_SetDirection 120                            ' 顺时针120度
  240. CDGen_FowardDraw -0.7                             ' 反方向绘制0.7个单位
  241. CDGen_SetDirection 120                            ' 顺时针120度
  242. CDGen_FowardDraw 0.5                              ' 绘制0.5个单位
  243. CDGen_CloseToMiddle 2, 50                         ' 将当前画笔位置与第2笔(0开始)的50%处封闭
  244. Case "7"
  245. CDGen_SetDirection 180                            ' 顺时针180度(相对于垂直线)
  246. CDGen_FowardDraw 0.3                              ' 绘制0.3个单位
  247. CDGen_SetDirection 90                             ' 顺时针90度
  248. CDGen_FowardDraw 0.9                              ' 绘制0.9个单位
  249. CDGen_SetDirection 120                            ' 顺时针120度
  250. CDGen_FowardDraw 1.3                              ' 绘制1.3个单位
  251. Case "8"
  252. CDGen_SetDirection -60                            ' 逆时针60度(相对于垂直线)
  253. CDGen_FowardDraw -0.8                             ' 反方向绘制0.8个单位
  254. CDGen_SetDirection -60                            ' 逆时针60度
  255. CDGen_FowardDraw -0.8                             ' 反方向绘制0.8个单位
  256. CDGen_SetDirection 120                            ' 顺时针120度
  257. CDGen_FowardDraw 0.8                              ' 绘制0.8个单位
  258. CDGen_SetDirection 110                            ' 顺时针110度
  259. CDGen_FowardDraw -1.5                             ' 反方向绘制1.5个单位
  260. CDGen_SetDirection -110                           ' 逆时针110度
  261. CDGen_FowardDraw 0.9                              ' 绘制0.9个单位
  262. CDGen_SetDirection 60                             ' 顺时针60度
  263. CDGen_FowardDraw 0.8                              ' 绘制0.8个单位
  264. CDGen_SetDirection 60                             ' 顺时针60度
  265. CDGen_FowardDraw 0.8                              ' 绘制0.8个单位
  266. CDGen_SetDirection 60                             ' 顺时针60度
  267. CDGen_FowardDraw 0.9                              ' 绘制0.9个单位
  268. CDGen_SetDirection 70                             ' 顺时针70度
  269. CDGen_FowardDraw 1.5                             ' 绘制1.5个单位
  270. CDGen_Close 0                                     ' 封闭当前笔与第0笔(0开始)
  271. Case "9"
  272. CDGen_SetDirection 120                            ' 逆时针60度(相对于垂直线)
  273. CDGen_FowardDraw -0.7                             ' 反方向绘制0.7个单位
  274. CDGen_SetDirection -60                            ' 逆时针60度
  275. CDGen_FowardDraw -0.7                             ' 反方向绘制0.7个单位
  276. CDGen_SetDirection -60                            ' 顺时针120度
  277. CDGen_FowardDraw -1.5                              ' 绘制1.5个单位
  278. CDGen_SetDirection -60                            ' 顺时针120度
  279. CDGen_FowardDraw -0.7                             ' 反方向绘制0.7个单位
  280. CDGen_SetDirection -60                            ' 顺时针120度
  281. CDGen_FowardDraw -0.7                              ' 绘制0.7个单位
  282. CDGen_SetDirection 120                            ' 顺时针120度
  283. CDGen_FowardDraw 0.7                             ' 反方向绘制0.7个单位
  284. CDGen_SetDirection -60                            ' 顺时针120度
  285. CDGen_FowardDraw 0.5                              ' 绘制0.5个单位
  286. CDGen_CloseToMiddle 2, 50                         ' 将当前画笔位置与第2笔(0开始)的50%处封闭
  287. Case "A"
  288. CDGen_SetDirection -(Rnd * 20 + 150)              ' 逆时针150-170度(相对于垂直线)
  289. CDGen_FowardDraw Rnd * 0.2 + 1.1                  ' 绘制1.1-1.3个单位
  290. CDGen_SetDirection Rnd * 20 + 140                 ' 顺时针140-160度
  291. CDGen_FowardDraw Rnd * 0.2 + 1.1                  ' 绘制1.1-1.3个单位
  292. CDGen_MoveToMiddle 0, 30                          ' 移动画笔的位置到第1笔(0开始)的30%处
  293. CDGen_CloseToMiddle 1, 70                         ' 将当前画笔位置与第1笔(0开始)的70%处封闭
  294. Case "B"
  295. CDGen_SetDirection -(Rnd * 20 + 50)               ' 逆时针50-70度(相对于垂直线)
  296. CDGen_FowardDraw Rnd * 0.4 + 0.8                  ' 绘制0.8-1.2个单位
  297. CDGen_SetDirection Rnd * 20 + 110                 ' 顺时针110-130度
  298. CDGen_FowardDraw Rnd * 0.2 + 0.6                  ' 绘制0.6-0.8个单位
  299. CDGen_SetDirection -(Rnd * 20 + 110)              ' 逆时针110-130度
  300. CDGen_FowardDraw Rnd * 0.2 + 0.6                  ' 绘制0.6-0.8个单位
  301. CDGen_SetDirection Rnd * 20 + 110                 ' 顺时针110-130度
  302. CDGen_FowardDraw Rnd * 0.4 + 0.8                  ' 绘制0.8-1.2个单位
  303. CDGen_Close 0                                     ' 封闭当前笔与第1笔(0开始)
  304. Case "C"
  305. CDGen_SetDirection -60                            ' 逆时针60度(相对于垂直线)
  306. CDGen_FowardDraw -0.7                             ' 反方向绘制0.7个单位
  307. CDGen_SetDirection -60                            ' 逆时针60度
  308. CDGen_FowardDraw -0.7                             ' 反方向绘制0.7个单位
  309. CDGen_SetDirection 120                            ' 顺时针120度
  310. CDGen_FowardDraw 1.5                              ' 绘制1.5个单位
  311. CDGen_SetDirection 120                            ' 顺时针120度
  312. CDGen_FowardDraw -0.7                             ' 反方向绘制0.7个单位
  313. CDGen_SetDirection 120                            ' 顺时针120度
  314. CDGen_FowardDraw 0.7                              ' 绘制0.7个单位
  315. Case "D"
  316. CDGen_SetDirection -(Rnd * 0 + 50)               ' 逆时针50-70度(相对于垂直线)
  317. CDGen_FowardDraw Rnd * 0.4 + 0.8                  ' 绘制0.8-1.2个单位
  318. CDGen_SetDirection Rnd * 0 + 110                 ' 顺时针110-130度
  319. CDGen_FowardDraw Rnd * 0.2 + 0.6                  ' 绘制0.6-0.8个单位
  320. 'CDGen_SetDirection -(Rnd * 20 + 110)              ' 逆时针110-130度
  321. 'CDGen_FowardDraw Rnd * 0.2 + 0.6                  ' 绘制0.6-0.8个单位
  322. CDGen_SetDirection Rnd * 0+ 110                 ' 顺时针110-130度
  323. CDGen_FowardDraw Rnd * 0.4 + 0.8                  ' 绘制0.8-1.2个单位
  324. CDGen_Close 0                                     ' 封闭当前笔与第1笔(0开始)
  325. End Select
  326. CDGen_Flush X0, Y0
  327. End Sub
  328. Sub CDGen_Blur()
  329. Dim i, j
  330. For j = 1 To tmp_PH_2_ - 2
  331. For i = 1 To tmp_Pw_1_ - 2
  332. If str_Bur(j, i) = 0 Then
  333. If ((str_Bur(j, i - 1) Or str_Bur(j + 1, i)) and 1) <> 0 Then
  334. str_Bur(j, i) = 2
  335. End If
  336. End If
  337. Next
  338. Next
  339. End Sub
  340. Sub CDGen_NoisyLine()
  341. Dim i
  342. For i=1 To nNoisyLineCount
  343. Get_Pline Rnd * tmp_Pw_1_, Rnd * tmp_PH_2_, Rnd * tmp_Pw_1_, Rnd * tmp_PH_2_
  344. Next
  345. End Sub
  346. Sub Get_Dotrad()
  347. Dim i, j, NoisyDot, CurDot
  348. For j = 0 To tmp_PH_2_ - 1
  349. For i = 0 To tmp_Pw_1_ - 1
  350. If str_Bur(j, i) <> 0 Then
  351. If Rnd < nColorNoisyDotOdds Then
  352. str_Bur(j, i) = 0
  353. Else
  354. str_Bur(j, i) = nSaturation
  355. End If
  356. Else
  357. If Rnd < nBlankNoisyDotOdds Then
  358. str_Bur(j, i) = nSaturation
  359. Else
  360. str_Bur(j, i) = 0
  361. End If
  362. End If
  363. Next
  364. Next
  365. End Sub
  366. Sub CDGen()
  367. Dim i, Ch, w, x, y
  368. str_Digtal = ""
  369. CDGen_Clear
  370. w = nImgWidth / tmp_n_CharC_
  371. For i = 0 To tmp_n_CharC_ - 1
  372. tmp_n_PW_ = w * (1 + (Rnd * 2 - 1) * nCharWidthRandom / 100)
  373. tmp_n_PH_ = nImgHeight * (1 - Rnd * nCharHeightRandom / 100)
  374. x = nSpaceX + w * (i + (Rnd * 2 - 1) * nPositionXRandom / 100)
  375. y = nSpaceY + nImgHeight * (Rnd * 2 - 1) * nPositionYRandom / 100
  376. Ch = Mid(cCharSet, Int(Rnd * Len(cCharSet)) + 1, 1)
  377. str_Digtal = str_Digtal + Ch
  378. CDGen_Char Ch, x, y
  379. Next
  380. CDGen_Blur
  381. CDGen_NoisyLine
  382. Get_Dotrad
  383. End Sub
  384. Function str_HSBToRGB(vH, vS, vB)
  385. Dim aRGB(3), RGB1st, RGB2nd, RGB3rd
  386. Dim nH, nS, nB
  387. Dim lH, nF, nP, nQ, nT
  388. vH = (vH Mod 360)
  389. If vS > 100 Then
  390. vS = 100
  391. ElseIf vS < 0 Then
  392. vS = 0
  393. End If
  394. If vB > 100 Then
  395. vB = 100
  396. ElseIf vB < 0 Then
  397. vB = 0
  398. End If
  399. If vS > 0 Then
  400. nH = vH / 60
  401. nS = vS / 100
  402. nB = vB / 100
  403. lH = Int(nH)
  404. nF = nH - lH
  405. nP = nB * (1 - nS)
  406. nQ = nB * (1 - nS * nF)
  407. nT = nB * (1 - nS * (1 - nF))
  408. Select Case lH
  409. Case 0
  410. aRGB(0) = nB * 255
  411. aRGB(1) = nT * 255
  412. aRGB(2) = nP * 255
  413. Case 1
  414. aRGB(0) = nQ * 255
  415. aRGB(1) = nB * 255
  416. aRGB(2) = nP * 255
  417. Case 2
  418. aRGB(0) = nP * 255
  419. aRGB(1) = nB * 255
  420. aRGB(2) = nT * 255
  421. Case 3
  422. aRGB(0) = nP * 255
  423. aRGB(1) = nQ * 255
  424. aRGB(2) = nB * 255
  425. Case 4
  426. aRGB(0) = nT * 255
  427. aRGB(1) = nP * 255
  428. aRGB(2) = nB * 255
  429. Case 5
  430. aRGB(0) = nB * 255
  431. aRGB(1) = nP * 255
  432. aRGB(2) = nQ * 255
  433. End Select
  434. Else
  435. aRGB(0) = (vB * 255) / 100
  436. aRGB(1) = aRGB(0)
  437. aRGB(2) = aRGB(0)
  438. End If
  439. str_HSBToRGB = ChrB(Round(aRGB(2), 0)) & ChrB(Round(aRGB(1), 0)) & ChrB(Round(aRGB(0), 0))
  440. End Function
  441. Sub CreatValidCode(Foosun)
  442. Dim i, j, CurColorHue
  443. CDGen
  444. Session(Foosun) = lcase(str_Digtal) '记录入Session
  445. Dim FileSize, PicDataSize
  446. PicDataSize = tmp_Pw_1_ * tmp_PH_2_ * 3
  447. FileSize = PicDataSize + 54
  448. 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)
  449. Response.BinaryWrite ChrB(40) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(tmp_Pw_1_ Mod 256) & ChrB((tmp_Pw_1_  256) Mod 256) & ChrB((tmp_Pw_1_  256  256) Mod 256) & ChrB(tmp_Pw_1_  256  256  256) & ChrB(tmp_PH_2_ Mod 256) & ChrB((tmp_PH_2_  256) Mod 256) & ChrB((tmp_PH_2_  256  256) Mod 256) & ChrB(tmp_PH_2_  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)
  450. If nColorHue = -1 Then
  451. CurColorHue = Int(Rnd * 360)
  452. CurColorHue = 200
  453. ElseIf nColorHue <> -2 Then
  454. CurColorHue = nColorHue
  455. End If
  456. For j = 0 To tmp_PH_2_ - 1
  457. For i = 0 To tmp_Pw_1_ - 1
  458. If nColorHue = -2 Then
  459. Response.BinaryWrite str_HSBToRGB(0, 0, 100 - str_Bur(tmp_PH_2_ - 1 - j, i))
  460. Else
  461. Response.BinaryWrite str_HSBToRGB(CurColorHue, str_Bur(tmp_PH_2_ - 1 - j, i), 100)
  462. End If
  463. Next
  464. Next
  465. End Sub
  466. %>