/*
- * Note: generate a random code and display the random code graphically.
- */
$ ViewRandomCode = mt_rand (1000,10000 );
Session_start ();
- $ _ SESSION ['checksum'] = $ ViewRandomCode;
Function set_4pixel ($ r, $ g, $ B, $ x, $ y)
- {
- Global $ sx, $ sy, $ pixels;
$ Ofs = 3 * ($ sx * $ y + $ x );
- $ Pixels [$ ofs] = chr ($ r );
- $ Pixels [$ ofs + 1] = chr ($ g );
- $ Pixels [$ ofs + 2] = chr ($ B );
- $ Pixels [$ ofs + 3] = chr ($ r );
- $ Pixels [$ ofs + 4] = chr ($ g );
- $ Pixels [$ ofs + 5] = chr ($ B );
- $ Ofs + = 3 * $ sx;
- $ Pixels [$ ofs] = chr ($ r );
- $ Pixels [$ ofs + 1] = chr ($ g );
- $ Pixels [$ ofs + 2] = chr ($ B );
- $ Pixels [$ ofs + 3] = chr ($ r );
- $ Pixels [$ ofs + 4] = chr ($ g );
- $ Pixels [$ ofs + 5] = chr ($ B );
- }
- // Function for generating digital images
- Function draw2digits ($ x, $ y, $ number)
- {
- Draw_digit ($ x, $ y, (int) ($ number/10 ));
- Draw_digit ($ x + 11, $ y, $ number % 10 );
- }
Function draw_digit ($ x, $ y, $ digit)
- {
- Global $ sx, $ sy, $ pixels, $ digits, $ lines;
$ Digit = $ digits [$ digit];
- $ M = 8;
- For ($ B = 1, $ I = 0; $ I <7; $ I ++, $ B * = 2)
- {
- If ($ B & $ digit) ==$ B ){
- $ J = $ I * 4;
- $ X0 = $ lines [$ j] * $ m + $ x;
- $ Y0 = $ lines [$ j + 1] * $ m + $ y;
- $ X1 = $ lines [$ j + 2] * $ m + $ x;
- $ Y1 = $ lines [$ j + 3] * $ m + $ y;
- If ($ x0 = $ x1 ){
- $ Ofs = 3 * ($ sx * $ y0 + $ x0 );
- For ($ h = $ y0; $ h <= $ y1; $ h ++, $ ofs + = 3 * $ sx ){
- $ Pixels [$ ofs] = chr (0 );
- $ Pixels [$ ofs + 1] = chr (0 );
- $ Pixels [$ ofs + 2] = chr (0 );
- }
- } Else {
- $ Ofs = 3 * ($ sx * $ y0 + $ x0 );
- For ($ w = $ x0; $ w <= $ x1; $ w ++ ){
- $ Pixels [$ ofs ++] = chr (0 );
- $ Pixels [$ ofs ++] = chr (0 );
- $ Pixels [$ ofs ++] = chr (0 );
- }
- }
- }
- }
- }
// Add text to the image
- Function add_chunk ($ type)
- {
- Global $ result, $ data, $ chunk, $ crc_table;
// Chunk: Layer
- // Length: 4 bytes: used to calculate chunk
- // Chunk type: 4 bytes
- // Chunk data: length bytes
- // CRC: 4 bytes: cyclic verification
// Copy data and create CRC checksum
- $ Len = strlen ($ data );
- $ Chunk = pack ("c *", ($ len> 24) & 255,
- ($ Len> 16) & 255,
- ($ Len> 8) & 255,
- $ Len & 255 );
- $ Chunk. = $ type;
- $ Chunk. = $ data;
// Calculate a CRC checksum with the bytes chunk [4 .. len-1]
- $ Z = 16777215;
- $ Z | = 255 <24;
- $ C = $ z;
- For ($ n = 4; $ n <strlen ($ chunk); $ n ++ ){
- $ C8 = ($ c> 8) & 0 xffffff;
- $ C = $ crc_table [($ c ^ ord ($ chunk [$ n]) & 0xff] ^ $ c8;
- }
- $ Crc = $ c ^ $ z;
$ Chunk. = chr ($ crc> 24) & 255 );
- $ Chunk. = chr ($ crc> 16) & 255 );
- $ Chunk. = chr ($ crc> 8) & 255 );
- $ Chunk. = chr ($ crc & 255 );
// Add the result to $ result
- $ Result. = $ chunk;
- }
// Main program
$ Sx = 55;
- $ Sy = 21;
- $ Pixels = rand (, 99990) % 2 ?" Qwer ":"";
// Fill
- For ($ h = 0; $ h <$ sy; $ h ++)
- {
- For ($ w = 0; $ w <$ sx; $ w ++)
- {
- $ R = 100/$ sx * $ w + 155;
- $ G = 100/$ sy * $ h + 155;
- $ B = 255-(100/($ sx + $ sy) * ($ w + $ h ));
- $ Pixels. = chr ($ r );
- $ Pixels. = chr ($ g );
- $ Pixels. = chr ($ B );
- }
- }
$ Checknum = isset ($ ViewRandomCode )? $ ViewRandomCode: 1234;
- $ H = (int) ($ checknum/100 );
- $ M = (int) ($ checknum% 100 );
- $ Digits = array (95, 5,118,117, 45,121,123, 69,127,125 );
- $ Lines = array (1, 1, 1, 2, 0, 1, 0, 2, 1, 0, 1, 1, 0, 0, 0, 1, 0, 2, 1, 2, 0, 1, 1, 1, 0, 0, 1, 0 );
Draw2digits (4, 2, $ h );
- Draw2digits (30, 2, $ m );
// Set_4pixel (0, 0, 0, 26, 7 );
- // Set_4pixel (0, 0, 0, 26, 13 );
// Create a cyclic verification table
- $ Z =-306674912; // = 0xedb88320
- For ($ n = 0; $ n <256; $ n ++ ){
- $ C = $ n;
- For ($ k = 0; $ k <8; $ k ++ ){
- $ C2 = ($ c> 1) & 0 × 7fffffff;
- If ($ c & 1) $ c = $ z ^ ($ c2); else $ c = $ c2;
- }
- $ Crc_table [$ n] = $ c;
- }
// PNG file signature
- $ Result = pack ("c );
// IHDR chunk data:
- // Width: 4 bytes
- // Height: 4 bytes
- // Bit depth: 1 byte (8 bits per RGB value)
- // Color type: 1 byte (2 = RGB)
- // Compression method: 1 byte (0 = deflate/inflate)
- // Filter method: 1 byte (0 = adaptive filtering)
- // Interlace method: 1 byte (0 = no interlace)
- $ Data = pack ("c *", ($ sx> 24) & 255,
- ($ Sx> 16) & 255,
- ($ Sx> 8) & 255,
- $ Sx & 255,
- ($ Sy> 24) & 255,
- ($ Sy> 16) & 255,
- ($ Sy> 8) & 255,
- $ Sy & 255,
- 8,
- 2,
- 0,
- 0,
- 0 );
- Add_chunk ("IHDR ");
// Do not translate the text below. please refer to it yourself
- // Scanline:
- // Filter byte: 0 = none
- // RGB bytes for the line
- // The scanline is compressed with "zlib", method 8 (RFC-1950 ):
- // Compression method/flags code: 1 byte ($78 = method 8, 32 k window)
- // Additional flags/check bits: 1 byte ($01: FCHECK = 1, FDICT = 0, FLEVEL = 0)
- // Compressed data blocks: n bytes
- // One block (RFC-1951 ):
- // Bit 0: BFINAL: 1 for the last block
- // Bit 1 and 2: BTYPE: 0 for no compression
- // Next 2 bytes: LEN (LSB first)
- // Next 2 bytes: one's complement of LEN
- // LEN bytes uncompressed data
- // Check value: 4 bytes (Adler-32 checksum of the uncompressed data)
- //
- $ Len = ($ sx * 3 + 1) * $ sy;
- $ Data = pack ("c *", 0x78, 0x01,
- 1,
- $ Len & 255,
- ($ Len> 8) & 255,
- 255-($ len & 255 ),
- 255-($ len> 8) & 255 ));
- $ Start = strlen ($ data );
- $ I2 = 0;
- For ($ h = 0; $ h <$ sy; $ h ++ ){
- $ Data. = chr (0 );
- For ($ w = 0; $ w <$ sx * 3; $ w ++ ){
- $ Data. = $ pixels [$ i2 ++];
- }
- }
// Calculate a Adler32 checksum with the bytes data [start .. len-1]
- $ S1 = 1;
- $ S2 = 0;
- For ($ n = $ start; $ n <strlen ($ data); $ n ++ ){
- $ S1 = ($ s1 + ord ($ data [$ n]) % 65521;
- $ S2 = ($ s2 + $ S1.) % 65521;
- }
- $ Adler = ($ s2 <16) | $ s1;
$ Data. = chr ($ adler> 24) & 255 );
- $ Data. = chr ($ adler> 16) & 255 );
- $ Data. = chr ($ adler> 8) & 255 );
- $ Data. = chr ($ adler & 255 );
- Add_chunk ("IDAT ");
// IEND: marks the end of the PNG-file
- $ Data = "";
- Add_chunk ("IEND ");
// Print the image
Echo ($ result );
- ?>
|