<?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);
}
|