【www.gdgbn.com--php常用代码】
<%@language="javascript"%>
<%
/*
* Copyright (c) 2006 Hardway Hou
* Distributed under the BSD License
* Inspired from PNGlet http://www.elf.org/pnglets/
*/
var ASCII=new Array(36);
ASCII[0] = "1110000111110111101111011110111101111011110111101111011110111101111011110111101111011110111110000111";
ASCII[1] = "1111011111110001111111110111111111011111111101111111110111111111011111111101111111110111111100000111";
ASCII[2] = "1110000111110111101111011110111111111011111111011111111011111111011111111011111111011110111100000011";
ASCII[3] = "1110000111110111101111011110111111110111111100111111111101111111111011110111101111011110111110000111";
ASCII[4] = "1111101111111110111111110011111110101111110110111111011011111100000011111110111111111011111111000011";
ASCII[5] = "1100000011110111111111011111111101000111110011101111111110111111111011110111101111011110111110000111";
ASCII[6] = "1111000111111011101111011111111101111111110100011111001110111101111011110111101111011110111110000111";
ASCII[7] = "1100000011110111011111011101111111101111111110111111110111111111011111111101111111110111111111011111";
ASCII[8] = "1110000111110111101111011110111101111011111000011111101101111101111011110111101111011110111110000111";
ASCII[9] = "1110001111110111011111011110111101111011110111001111100010111111111011111111101111011101111110001111";
ASCII[10] = "1111011111111101111111101011111110101111111010111111101011111100000111110111011111011101111000100011";
ASCII[11] = "1000000111110111101111011110111101110111110000111111011101111101111011110111101111011110111000000111";
ASCII[12] = "1110000011110111101110111110111011111111101111111110111111111011111111101111101111011101111110001111";
ASCII[13] = "0000001111110111011111011110111101111011110111101111011110111101111011110111101111011101110000001111";
ASCII[14] = "1000000111110111101111011011111101101111110000111111011011111101101111110111111111011110111000000111";
ASCII[15] = "1000000111110111101111011011111101101111110000111111011011111101101111110111111111011111111000111111";
ASCII[16] = "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";
var FONT_WIDTH=10;
var FONT_HEIGHT=10;
// Note.
// Assume all the strings are formed by BYTE.
// That is, a single character is a BYTE.
// It will be converted to real BYTE at output phase.
// Using index color, depth 8
var WIDTH=160;
var HEIGHT=40;
var DEPTH=8;
var MAP=new Array((WIDTH+1)*HEIGHT);
function B4(b){
return String.fromCharCode((b>>24)&0xFF, (b>>16)&0xFF, (b>>8)&0xFF, b&0xFF);
}
function B2(b){
return String.fromCharCode((b>>8)&0xFF, b&0xFF);
}
function B1(b){
return String.fromCharCode(b&0xFF);
}
var CRC_TABLE=new Array(256);
// Make crc table
function CRC32_Init(){
var n=0, k=0;
var c;
for(n=0; n<256; n++){
c=n;
for(k=0; k<8; k++){
if (c&1)
c=0xedb88320^(c>>>1);
else
c=c>>>1;
}
CRC_TABLE[n]=c;
}
}
CRC32_Init();
function CRC32(str){
var c=0xFFFFFFFF;
var n=0;
for(n=0; n
}
return c^0xFFFFFFFF;
}
function png_signature(){
return [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];
}
function png_chunk(type, str){
var ary=[], i=0;
var crc;
crc=CRC32(type+str);
str=B4(str.length)+type+str;
str=str+B4(crc);
for(i=0; i
return ary;
}
function png_IHDR(){
return png_chunk("IHDR", B4(WIDTH)+B4(HEIGHT)+B1(DEPTH)+B1(3)+B1(0)+B1(0)+B1(0));
}
function png_PLTE(){
return png_chunk("PLTE",
B1(255)+B1(255)+B1(255) //0
+B1(224)+B1(224)+B1(224) //1
+B1(192)+B1(192)+B1(192) //2
+B1(160)+B1(160)+B1(160) //3
+B1(128)+B1(128)+B1(128) //4
+B1(96)+B1(96)+B1(96) //5
+B1(64)+B1(64)+B1(64) //6
+B1(32)+B1(32)+B1(32) //7
+B1(0)+B1(0)+B1(0) //8
);
}
function png_IDAT(){
var h=HEIGHT
var strip=WIDTH+1;
var x, y;
var data=""
for(y=0; y
var LEN=data.length;
var NLEN=LEN^0xFFFFFFFF;
// Calculate Simple Adler-32 checksum
var BASE=65521, NMAX=5552;
var s1=1, s2=0, n=NMAX;
var i;
for(i=0; i
s2+=s1;
if((n--)==0){
s1%=BASE;
s2%=BASE;
n=NMAX;
}
}
s1%=BASE;
s2%=BASE;
return png_chunk("IDAT", B1(0x78)+B1(0xDA)+B1(0x01)+ /*uncompressd lz77*/
String.fromCharCode((LEN)&0xFF, (LEN>>8)&0xFF, (NLEN)&0xFF, (NLEN>>8)&0xFF) +
data+B4((s2<<16)|s1));
}
function png_IEND(){
return png_chunk("IEND", "");
}
function png_output(){
var dat=[], i=0
var str="";
dat=dat.concat(png_signature(), png_IHDR(), png_PLTE(), png_IDAT(), png_IEND());
if(dat.length % 2==1) dat.push(0); // Fill data to make it 2-byte aligned
for(i=0; i
}
}
function Map_Init(){
var x, y;
var strip=WIDTH+1;
for(x=0; x
MAP[x+y*strip]=0; // scanline indicator
else
MAP[x+y*strip]=8; // bgcolor
}
}
function putPixel(x, y, c){
MAP[x+1+y*(WIDTH+1)]=c;
}
function getPixel(x, y, c){
return MAP[x+1+y*(WIDTH+1)];
}
function putChar(ox, oy, ch){
var x, y;
oy+=Math.floor(Math.random()*5-5.5);
for(y=0;y
for(x=0;x
if(c>0){
c=0;
// double size, bold and random italic
putPixel(ox+x*3, oy+y*2, c);
putPixel(ox+x*3+1, oy+y*2, c);
putPixel(ox+x*3+2, oy+y*2, c);
putPixel(ox+x*3, oy+y*2+1, c);
putPixel(ox+x*3+1, oy+y*2+1, c);
putPixel(ox+x*3+2, oy+y*2+1, c);
}
}
}
}
function putNoise(n, c){
var i, x, y;
for(i=0; i
y=Math.floor(Math.random()*HEIGHT);
putPixel(x, y, c);
}
}
function smooth(){
var x, y;
var c0, c1, c2, c3, c4; // center, up, right, down, left
for(x=0; x
c1=(y>0)?getPixel(x, y-1):c0;
c2=(x
putPixel(x, y, Math.floor((c0*6+c1+c2+c3+c4)/10+0.5));
}
}
// MD5
var v1=0;var v2="";var v3=8;function hex_md5(s){return binl2hex(f2(f8(s),s.length*v3));}function b64_md5(s){return binl2b64(f2(f8(s),s.length*v3));}function str_md5(s){return binl2str(f2(f8(s),s.length*v3));}function hex_hmac_md5(key,data){return binl2hex(f9(key,data));}function b64_hmac_md5(key,data){return binl2b64(f9(key,data));}function str_hmac_md5(key,data){return binl2str(f9(key,data));}function f1(){return hex_md5("abc")=="900150983cd24fb0d6963f7d28e17f72";}function f2(x,len){x[len>>5]|=0x80<<((len)%32);x[(((len+64)>>>9)<<4)+14]=len;var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;for(var i=0;i
function captcha(str){
Map_Init();
var ox=FONT_WIDTH/2, oy=(HEIGHT-FONT_HEIGHT)/2;
var i;
var idx=0;
var c;
for(i=0; i
if(c<=57 && c>=48)
idx=c-48;
else if(c<=70 && c>=65)
idx=c-65+10;
else idx=16;
putChar(ox+i*FONT_WIDTH*2.5, oy, idx);
}
putNoise(500, 4);
putNoise(500, 2);
smooth();
png_output();
}
%>
<%
Response.Expires=-9999;
Response.addHeader("Pragma","no-cache");
Response.addHeader("Cache-Control","no-cache");
Response.ContentType="image/png";
captcha(hex_md5(Math.random().toString()).substr(0, 6).toUpperCase());
%>