| 
<?php/*
 *
 * Simple captcha script used for JSONP example.
 *
 */
 require 'JSONP.class.php';
 
 function hex2rgb($hex) {
 $hex = str_replace('#', NULL, $hex);
 if (strlen($hex) == 3) {
 $r = hexdec(str_repeat(substr($hex, 0, 1), 2));
 $g = hexdec(str_repeat(substr($hex, 1, 1), 2));
 $b = hexdec(str_repeat(substr($hex, 2, 1), 2));
 } else {
 $r = hexdec(substr($hex, 0, 2));
 $g = hexdec(substr($hex, 2, 2));
 $b = hexdec(substr($hex, 4, 2));
 }
 return array($r, $g, $b);
 }
 
 function validateHexColor($hex) {
 $hex = (substr($hex, 0, 1) == '#') ? $hex : '#' . $hex;
 if (preg_match('/^#([a-f0-9]{6}|[a-f0-9]{3})$/i', $hex)) {
 return TRUE;
 } else {
 return FALSE;
 }
 }
 
 session_start();
 
 if (isset($_GET['expected'])) {
 if ($_GET['expected'] == $_SESSION['expected']) {
 JSONP::output(TRUE);
 } else {
 JSONP::output(FALSE);
 }
 } else {
 // Background color
 if (isset($_GET['bg']) && validateHexColor($_GET['bg'])) {
 $bgc = hex2rgb($_GET['bg']);
 } else {
 $bgc = hex2rgb('#fff');
 }
 
 // Foreground color
 if (isset($_GET['fg']) && validateHexColor($_GET['fg'])) {
 $fgc = hex2rgb($_GET['fg']);
 } else {
 $fgc = hex2rgb('#000');
 }
 
 // Font
 if (isset($_GET['font']) && (int) $_GET['font'] > 0 && (int) $_GET['font'] <= 5) {
 $font = (int) $_GET['font'];
 } else {
 $font = 5;
 }
 
 // Is code?
 if (isset($_GET['code']) && $_GET['code']) {
 $string = rand(1000, 9999);
 $_SESSION['expected'] = $string;
 } else {
 $n1 = rand(1, 9);
 $n2 = rand(1, 9);
 $string = $n1 . ' + ' . $n2;
 $_SESSION['expected'] = $n1 + $n2;
 }
 
 // Width
 $w = imagefontwidth($font) * strlen($string) + 10;
 
 // Height
 $h = imagefontheight($font) + 10;
 
 $im = imagecreatetruecolor($w, $h);
 $bg = imagecolorallocate($im, $bgc[0], $bgc[1], $bgc[2]); //background color blue
 $fg = imagecolorallocate($im, $fgc[0], $fgc[1], $fgc[2]); //text color white
 
 imagefill($im, 0, 0, $bg);
 imagestring($im, $font, 5, 5,  $string, $fg);
 header("Cache-Control: no-cache, must-revalidate");
 header('Content-type: image/png');
 imagepng($im);
 imagedestroy($im);
 }
 |