2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 | <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% '''''''''''''''''''''''''''''''''''''''''''''''''''''' 'ASP生成BMP验证码图片 '石卓林(精彩) 'Site URL:Http://www.camxam.com 'EMail:camxam@163.com 'QQ:383193853 'MSN:camxam@163.com '2006年3月9日 星期四 '使用方法:在需要显示的页面嵌入 <img Src="Bmp.asp" />, 在验证码检验中使用 Session(SessionName属性值) 作为验证码参考值 '属性: ' SessionName String 会话名称. 例 Object.SessionName = "Code" ' TextLength Int 字符长度. 例 Object.TextLength = 4 ' BackColor String 背景颜色,多个颜色用"," 分隔. 例:Object.BackColor = "#FF0000,#00FF00,#0000FF". ' TextColor String 文字颜色,同上. ' YawpColor String 杂点颜色,同上. ' YawpCount Int 杂点比例 范围 0-100. 例 Object.YawpCount = 30 '方法: ' SetTextInfo String 设置字库描述信息 注意在执行任何操作前必须描述和增加点阵数据. 例: Object.SetTextInfo "这是卡通字库" ' AddTextData String 增加字库点阵信息 注意在执行任何操作前必须描述和增加点阵数据. 例: Object.AddTextData "E 00000000 00000000 01111100 01000000 01000000 01111000 01000000 01000000 01000000 01111100 00000000 00000000" ' Write() 输出图片数据 '注意事项: '1. 关于颜色字符串: ' 可以同时设置任意多种颜色 不同的颜色之间使用 "," 分隔. 程序会将预设的多种颜色随机显示 '2. 关于会话名称: ' SessionName属性设置的是 Session 变量名称.通过在其它页面中将表单数据与此 Session变量值比较,实现验证码功能. '3. 关于字符长度: ' 字符长度必须大于 1 .最大长度没有限制. 实际上不可能设置很大 "呵呵!ASP毕竟不是画图软件." '4. 杂点颜色杂点比例: ' 杂点比例范围 0-100. 此值越大杂点越多,0 为无杂点,100全部是杂点. ' 和背景颜色与文字颜色一样 杂点颜色也可以设置一种一上的颜色.程序会随机使用其中的颜色 ' 如将杂点比例设置为 0 则 杂点颜色属性可以不设置 '5. 字库信息: ' 字库信息就是一个字符串,此信息必须设置.内容格式不要求 '6. 字库点阵: ' 程序是随机查询字库点阵内容输出BMP图片的. ' 每一条点阵.的格式必须一样. ' 每条点阵信息的长度必须一样. ' 所有点阵信息的行数必须一样. ' 所有点阵信息的每行长度必须一样. ' 点阵信息格式: '字符 第一行点阵 第二行点阵 第三行点阵 第四行点阵 第五行点阵 第六行点阵 第七行点阵 ...... ...... ..... ...... ...... '0 00000000 00000000 00111000 01000100 01000100 01000100 01000100 01000100 01000100 00111000 00000000 00000000 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Option Explicit Class CAMXAM_COM_RndCodeBmp Private TextDataLib,TextData,BmpData,BmpHead,BmpWidth,BmpHeight,BmpSize,TextDataLength,SessionString Public SessionName,TextLength,BackColor,TextColor,YawpColor,YawpCount Private Sub Class_Initialize() End Sub Private Sub Class_Terminate() End Sub Public Function SetTextInfo(TextString) ReDim TextDataLib(0) TextDataLib(0) = TextString End Function Public Function AddTextData(TextDataString) TextDataLength = UBound(TextDataLib) + 1 ReDim Preserve TextDataLib(TextDataLength) TextDataLib(TextDataLength) = TextDataString End Function Private Function Getbinary(IntNumber) Dim IntBin0,IntBin1,IntBin2,IntBin0_,IntBin1_,IntBin2_ IntBin0 = Int(IntNumber / 16777216) IntBin0_= IntNumber Mod 16777216 IntBin1 = Int(IntBin0_ / 65536) IntBin1_= IntBin0_ Mod 65536 IntBin2 = Int(IntBin1_ / 256) IntBin2_= IntBin1_ Mod 256 Getbinary = ChrB(IntBin2_) & ChrB(IntBin2) & ChrB(IntBin1) & ChrB(IntBin0) End Function Private Function GetColorString(ColorString) Dim ColorArray,CALength ColorArray = Split(ColorString,",") CALength = UBound(ColorArray) GetColorString = ColorArray(GetRnd(0,CALength)) End Function Private Function GetRnd(LowNumber,UpNumber) Randomize Timer GetRnd = Int((UpNumber - LowNumber + 1) * Rnd + LowNumber) End Function Private Function FileHeader() Response.Expires = 0 Response.AddHeader "Pragma","no-cache" Response.AddHeader "cache-ctrol","no-cache" Response.ContentType = "Image/BMP" End Function Private Function SetBmpHead(BmpSize,Width,Height) BmpHead = ChrB(66) & ChrB(77) '类型"BM" BmpHead = BmpHead & Getbinary(BmpSize+54) '文件的大小(字节) BmpHead = BmpHead & Getbinary(0) '保留必须为0 BmpHead = BmpHead & Getbinary(54) '从文件开始到位图数据开始的偏移动量 BmpHead = BmpHead & Getbinary(40) '述位图的颜色、压缩方法等 BmpHead = BmpHead & Getbinary(Width) '位图的宽度,以象素为单位 BmpHead = BmpHead & Getbinary(Height) '位图的高度,以象素为单位 BmpHead = BmpHead & ChrB(1) & ChrB(0) '位图的位面数(注:该值将总是 BmpHead = BmpHead & ChrB(24) & ChrB(0) '每个象素的位数 BmpHead = BmpHead & Getbinary(0) '压缩说明 BmpHead = BmpHead & Getbinary(BmpSize) '用字节数表示的位图数据的大小。该数必须是4的倍数 BmpHead = BmpHead & Getbinary(65536) '用象素/米表示的水平分辨率 BmpHead = BmpHead & Getbinary(65536) '用象素/米表示的垂直分辨率 BmpHead = BmpHead & Getbinary(16777216) '位图使用的颜色数 BmpHead = BmpHead & Getbinary(16777216) '指定重要的颜色数 End Function Private Function GetRndTextData() ReDim TextData(TextLength-1) Dim IText For IText = 0 To TextLength-1 Step +1 TextData(IText) = GetColorString(BackColor) & " " & GetColorString(TextColor) & " " & TextDataLib(GetRnd(1,TextDataLength)) SessionString = SessionString & GetTextData(IText)(4) Next End Function Private Function GetTextData(IText) Dim TextArray,ArrayLength,ITextData TextArray = Split(TextData(IText)," ") ArrayLength = UBound(TextArray) Dim TextDataArray(5) TextDataArray(0) = TextArray(0) '背景颜色 TextDataArray(1) = TextArray(1) '字符颜色 TextDataArray(2) = Len(TextArray(3)) '单字符宽度 TextDataArray(3) = ArrayLength - 2 '单字符高度 TextDataArray(4) = TextArray(2) '字符 For ITextData = 3 To ArrayLength Step +1 TextDataArray(5) = TextDataArray(5) & " " & TextArray(ITextData) '点阵数据 Next GetTextData = TextDataArray End Function Private Function GetColor(ColorString) GetColor = ChrB("&H" & Mid(ColorString,6,2)) & ChrB("&H" & Mid(ColorString,4,2)) & ChrB("&H" & Mid(ColorString,2,2)) End Function Private Function BmpColor(ColorA,ColorB) Dim BmpColor_(1) BmpColor_(0) = GetColor(ColorA) BmpColor_(1) = GetColor(ColorB) BmpColor = BmpColor_ End Function Private Function SetBmpData() Dim TextInfo,FontData,I,J,K GetRndTextData() TextInfo = GetTextData(0) BmpHeight = TextInfo(3) BmpWidth = TextInfo(2) * TextLength BmpSize = BmpHeight * BmpWidth * 3 For I = BmpHeight To 1 Step -1 For J = 0 To TextLength -1 Step +1 TextInfo = GetTextData(J) FontData = Split(TextInfo(5)," ")(I) For K = 1 To TextInfo(2) Step +1 If GetRnd(1,99) < YawpCount Then BmpData = BmpData & GetColor(GetColorString(YawpColor)) Else BmpData = BmpData & BmpColor(TextInfo(0),TextInfo(1))(Mid(FontData,K,1)) End If Next Next Next End Function Public Function Write() FileHeader() SetBmpData() SetBmpHead BmpSize,BmpWidth,BmpHeight Response.BinaryWrite BmpHead Response.BinaryWrite BmpData Session(SessionName) = SessionString End Function End Class Dim Bmp Set Bmp = New CAMXAM_COM_RndCodeBmp Bmp.SetTextInfo "8 × 12 字库 字库来源 Wh_BmpText http://vcc5.vicp.net Email: wuyingke5155@163.com Oicq:54883661" '字库信息 Bmp.AddTextData "0 00000000 00000000 00111000 01000100 01000100 01000100 01000100 01000100 01000100 00111000 00000000 00000000" Bmp.AddTextData "1 00000000 00000000 00110000 01010000 00010000 00010000 00010000 00010000 00010000 01111100 00000000 00000000" Bmp.AddTextData "2 00000000 00000000 01111000 00000100 00000100 00001000 00010000 00100000 01000000 01111100 00000000 00000000" Bmp.AddTextData "3 00000000 00000000 01111000 00000100 00000100 00111000 00000100 00000100 00000100 01111000 00000000 00000000" Bmp.AddTextData "4 00000000 00000000 00001000 00011000 00101000 00101000 01001000 01111100 00001000 00001000 00000000 00000000" Bmp.AddTextData "5 00000000 00000000 01111000 01000000 01000000 01110000 00001000 00001000 00001000 01110000 00000000 00000000" Bmp.AddTextData "6 00000000 00000000 00111100 01000000 01000000 01011000 01100100 01000100 01000100 00111000 00000000 00000000" Bmp.AddTextData "7 00000000 00000000 01111100 00000100 00001000 00010000 00100000 00100000 01000000 01000000 00000000 00000000" Bmp.AddTextData "8 00000000 00000000 00111000 01000100 01000100 00111000 01001100 01000100 01000100 00111000 00000000 00000000" Bmp.AddTextData "9 00000000 00000000 00111000 01000100 01000100 01001100 00110100 00000100 00000100 01111000 00000000 00000000" Bmp.AddTextData "A 00000000 00000000 00010000 00101000 00101000 00101000 01000100 01111100 01000100 10000010 00000000 00000000" Bmp.AddTextData "B 00000000 00000000 01111000 01000100 01000100 01111000 01001000 01000100 01000100 01111000 00000000 00000000" Bmp.AddTextData "C 00000000 00000000 00011100 00100000 01000000 01000000 01000000 01000000 00100000 00011100 00000000 00000000" Bmp.AddTextData "D 00000000 00000000 01110000 01001000 01000100 01000100 01000100 01000100 01001000 01110000 00000000 00000000" Bmp.AddTextData "E 00000000 00000000 01111100 01000000 01000000 01111000 01000000 01000000 01000000 01111100 00000000 00000000" Bmp.AddTextData "F 00000000 00000000 01111100 01000000 01000000 01111000 01000000 01000000 01000000 01000000 00000000 00000000" Bmp.AddTextData "G 00000000 00000000 00011100 00100000 01000000 01000000 01000100 01000100 00100100 00011100 00000000 00000000" Bmp.AddTextData "H 00000000 00000000 01000100 01000100 01000100 01111100 01000100 01000100 01000100 01000100 00000000 00000000" Bmp.AddTextData "I 00000000 00000000 01111100 00010000 00010000 00010000 00010000 00010000 00010000 01111100 00000000 00000000" Bmp.AddTextData "J 00000000 00000000 00111000 00001000 00001000 00001000 00001000 00001000 00001000 01110000 00000000 00000000" Bmp.AddTextData "K 00000000 00000000 01000100 01001000 01010000 01100000 01100000 01010000 01001000 01000100 00000000 00000000" Bmp.AddTextData "L 00000000 00000000 01000000 01000000 01000000 01000000 01000000 01000000 01000000 01111100 00000000 00000000" Bmp.AddTextData "M 00000000 00000000 10000100 10000100 11001100 11001100 10110100 10110100 10000100 10000100 00000000 00000000" Bmp.AddTextData "N 00000000 00000000 01000100 01100100 01100100 01010100 01010100 01001100 01001100 01000100 00000000 00000000" Bmp.AddTextData "O 00000000 00000000 00010000 00101000 01000100 01000100 01000100 01000100 00101000 00010000 00000000 00000000" Bmp.AddTextData "P 00000000 00000000 01111000 01000100 01000100 01001000 01110000 01000000 01000000 01000000 00000000 00000000" Bmp.AddTextData "Q 00000000 00000000 00010000 00101000 01000100 01000100 01000100 01000100 00101000 00011000 00000100 00000000" Bmp.AddTextData "R 00000000 00000000 01111000 01000100 01000100 01000100 01111000 01001000 01000100 01000100 00000000 00000000" Bmp.AddTextData "S 00000000 00000000 00111100 01000000 01000000 00110000 00001000 00000100 00000100 01111000 00000000 00000000" Bmp.AddTextData "T 00000000 00000000 11111110 00010000 00010000 00010000 00010000 00010000 00010000 00010000 00000000 00000000" Bmp.AddTextData "U 00000000 00000000 01000100 01000100 01000100 01000100 01000100 01000100 01000100 00111000 00000000 00000000" Bmp.AddTextData "V 00000000 00000000 10000010 01000100 01000100 01000100 00101000 00101000 00101000 00010000 00000000 00000000" Bmp.AddTextData "W 00000000 00000000 10000010 10000010 10010010 10010010 01101100 01101100 01000100 01000100 00000000 00000000" Bmp.AddTextData "X 00000000 00000000 01000100 00101000 00101000 00010000 00010000 00101000 01000100 01000100 00000000 00000000" Bmp.AddTextData "Y 00000000 00000000 01000100 01000100 00101000 00101000 00010000 00010000 00010000 00010000 00000000 00000000" Bmp.AddTextData "Z 00000000 00000000 01111100 00000100 00001000 00010000 00010000 00100000 01000000 01111100 00000000 00000000" Bmp.SessionName = "code" '验证码用Session名称 Bmp.TextLength = 6 '验证码长度 Bmp.BackColor = "#FFFFFF" '背景颜色,多个颜色用"," 分隔 Bmp.TextColor = "#FF0000,#00FF00,#0000FF" '文字颜色,多个颜色用"," 分 Bmp.YawpColor = "#000000" '噪波点颜色,多个颜色使用"," 分隔 Bmp.YawpCount = 10 '噪波点比例 0-100 Bmp.Write() %> |
3