summaryrefslogtreecommitdiff
path: root/framework/Web/UI/WebControls/assets/captcha.php
diff options
context:
space:
mode:
Diffstat (limited to 'framework/Web/UI/WebControls/assets/captcha.php')
-rw-r--r--framework/Web/UI/WebControls/assets/captcha.php448
1 files changed, 224 insertions, 224 deletions
diff --git a/framework/Web/UI/WebControls/assets/captcha.php b/framework/Web/UI/WebControls/assets/captcha.php
index b26df895..08a857b5 100644
--- a/framework/Web/UI/WebControls/assets/captcha.php
+++ b/framework/Web/UI/WebControls/assets/captcha.php
@@ -1,224 +1,224 @@
-<?php
-/**
- * CAPTCHA generator script.
- *
- * @author Qiang Xue <qiang.xue@gmail.com>
- * @link http://www.pradosoft.com/
- * @copyright Copyright &copy; 2005-2012 PradoSoft
- * @license http://www.pradosoft.com/license/
- * @version $Id$
- * @package System.Web.UI.WebControls.assets
- */
-
-define('THEME_OPAQUE_BACKGROUND',0x0001);
-define('THEME_NOISY_BACKGROUND',0x0002);
-define('THEME_HAS_GRID',0x0004);
-define('THEME_HAS_SCRIBBLE',0x0008);
-define('THEME_MORPH_BACKGROUND',0x0010);
-define('THEME_SHADOWED_TEXT',0x0020);
-
-require_once(dirname(__FILE__).'/captcha_key.php');
-
-$token='error';
-$theme=0;
-
-if(isset($_GET['options']))
-{
- $str=base64_decode($_GET['options']);
- if(strlen($str)>32)
- {
- $hash=substr($str,0,32);
- $str=substr($str,32);
- if(md5($privateKey.$str)===$hash)
- {
- $options=unserialize($str);
- $publicKey=$options['publicKey'];
- $tokenLength=$options['tokenLength'];
- $caseSensitive=$options['caseSensitive'];
- $alphabet=$options['alphabet'];
- $fontSize=$options['fontSize'];
- $theme=$options['theme'];
- if(($randomSeed=$options['randomSeed'])>0)
- srand($randomSeed);
- else
- srand((int)(microtime()*1000000));
- $token=generateToken($publicKey,$privateKey,$alphabet,$tokenLength,$caseSensitive);
- }
- }
-}
-
-displayToken($token,$fontSize,$theme);
-
-function generateToken($publicKey,$privateKey,$alphabet,$tokenLength,$caseSensitive)
-{
- $token=substr(hash2string(md5($publicKey.$privateKey),$alphabet).hash2string(md5($privateKey.$publicKey),$alphabet),0,$tokenLength);
- return $caseSensitive?$token:strtoupper($token);
-}
-
-function hash2string($hex,$alphabet)
-{
- if(strlen($alphabet)<2)
- $alphabet='234578adefhijmnrtABDEFGHJLMNRT';
- $hexLength=strlen($hex);
- $base=strlen($alphabet);
- $result='';
- for($i=0;$i<$hexLength;$i+=6)
- {
- $number=hexdec(substr($hex,$i,6));
- while($number)
- {
- $result.=$alphabet[$number%$base];
- $number=floor($number/$base);
- }
- }
- return $result;
-}
-
-function displayToken($token,$fontSize,$theme)
-{
- if(($fontSize=(int)$fontSize)<22)
- $fontSize=22;
- if($fontSize>100)
- $fontSize=100;
- $length=strlen($token);
- $padding=10;
- $fontWidth=$fontSize;
- $fontHeight=floor($fontWidth*1.5);
- $width=$fontWidth*$length+$padding*2;
- $height=$fontHeight;
- $image=imagecreatetruecolor($width,$height);
-
- addBackground
- (
- $image, $width, $height,
- $theme&THEME_OPAQUE_BACKGROUND,
- $theme&THEME_NOISY_BACKGROUND,
- $theme&THEME_HAS_GRID,
- $theme&THEME_HAS_SCRIBBLE,
- $theme&THEME_MORPH_BACKGROUND
- );
-
- $font=dirname(__FILE__).DIRECTORY_SEPARATOR.'verase.ttf';
-
- if(function_exists('imagefilter'))
- imagefilter($image,IMG_FILTER_GAUSSIAN_BLUR);
-
- $hasShadow=($theme&THEME_SHADOWED_TEXT);
- for($i=0;$i<$length;$i++)
- {
- $color=imagecolorallocate($image,rand(150,220),rand(150,220),rand(150,220));
- $size=rand($fontWidth-10,$fontWidth);
- $angle=rand(-30,30);
- $x=$padding+$i*$fontWidth;
- $y=rand($fontHeight-15,$fontHeight-10);
- imagettftext($image,$size,$angle,$x,$y,$color,$font,$token[$i]);
- if($hasShadow)
- imagettftext($image,$size,$angle,$x+2,$y+2,$color,$font,$token[$i]);
- imagecolordeallocate($image,$color);
- }
-
- header('Content-Type: image/png');
- imagepng($image);
- imagedestroy($image);
-}
-
-function addBackground($image,$width,$height,$opaque,$noisy,$hasGrid,$hasScribble,$morph)
-{
- $background=imagecreatetruecolor($width*2,$height*2);
- $white=imagecolorallocate($background,255,255,255);
- imagefill($background,0,0,$white);
-
- if($opaque)
- imagefill($background,0,0,imagecolorallocate($background,100,100,100));
-
- if($noisy)
- addNoise($background,$width*2,$height*2);
-
- if($hasGrid)
- addGrid($background,$width*2,$height*2);
-
- if($hasScribble)
- addScribble($background,$width*2,$height*2);
-
- if($morph)
- morphImage($background,$width*2,$height*2);
-
- imagecopy($image,$background,0,0,30,30,$width,$height);
-
- if(!$opaque)
- imagecolortransparent($image,$white);
-}
-
-function addNoise($image,$width,$height)
-{
- for($x=0;$x<$width;++$x)
- {
- for($y=0;$y<$height;++$y)
- {
- if(rand(0,100)<25)
- {
- $color=imagecolorallocate($image,rand(150,220),rand(150,220),rand(150,220));
- imagesetpixel($image,$x,$y,$color);
- imagecolordeallocate($image,$color);
- }
- }
- }
-}
-
-function addGrid($image,$width,$height)
-{
- for($i=0;$i<$width;$i+=rand(15,25))
- {
- imagesetthickness($image,rand(2,6));
- $color=imagecolorallocate($image,rand(100,180),rand(100,180),rand(100,180));
- imageline($image,$i+rand(-10,20),0,$i+rand(-10,20),$height,$color);
- imagecolordeallocate($image,$color);
- }
- for($i=0;$i<$height;$i+=rand(15,25))
- {
- imagesetthickness($image,rand(2,6));
- $color=imagecolorallocate($image,rand(100,180),rand(100,180),rand(100,180));
- imageline($image,0,$i+rand(-10,20),$width,$i+rand(-10,20),$color);
- imagecolordeallocate($image,$color);
- }
-}
-
-function addScribble($image,$width,$height)
-{
- for($i=0;$i<8;$i++)
- {
- $color=imagecolorallocate($image,rand(100,180),rand(100,180),rand(100,180));
- $points=array();
- for($j=1;$j<rand(5,10);$j++)
- {
- $points[]=rand(2*(20*($i+1)),2*(50*($i+1)));
- $points[]=rand(30,$height+30);
- }
- imagesetthickness($image,rand(2,6));
- imagepolygon($image,$points,intval(sizeof($points)/2),$color);
- imagecolordeallocate($image,$color);
- }
-}
-
-function morphImage($image,$width,$height)
-{
- $tempImage=imagecreatetruecolor($width,$height);
- $chunk=rand(1,5);
- for($x=$y=0;$x<$width;$x+=$chunk)
- {
- $chunk=rand(1,5);
- $y+=rand(-1,1);
- if($y>=$height) $y=$height-5;
- if($y<0) $y=5;
- imagecopy($tempImage,$image,$x,0,$x,$y,$chunk,$height);
- }
- for($x=$y=0;$y<$height;$y+=$chunk)
- {
- $chunk=rand(1,5);
- $x+=rand(-1,1);
- if($x>=$width) $x=$width-5;
- if($x<0) $x=5;
- imagecopy($image,$tempImage,$x,$y,0,$y,$width,$chunk);
- }
-}
-
+<?php
+/**
+ * CAPTCHA generator script.
+ *
+ * @author Qiang Xue <qiang.xue@gmail.com>
+ * @link http://www.pradosoft.com/
+ * @copyright Copyright &copy; 2005-2012 PradoSoft
+ * @license http://www.pradosoft.com/license/
+ * @version $Id$
+ * @package System.Web.UI.WebControls.assets
+ */
+
+define('THEME_OPAQUE_BACKGROUND',0x0001);
+define('THEME_NOISY_BACKGROUND',0x0002);
+define('THEME_HAS_GRID',0x0004);
+define('THEME_HAS_SCRIBBLE',0x0008);
+define('THEME_MORPH_BACKGROUND',0x0010);
+define('THEME_SHADOWED_TEXT',0x0020);
+
+require_once(dirname(__FILE__).'/captcha_key.php');
+
+$token='error';
+$theme=0;
+
+if(isset($_GET['options']))
+{
+ $str=base64_decode($_GET['options']);
+ if(strlen($str)>32)
+ {
+ $hash=substr($str,0,32);
+ $str=substr($str,32);
+ if(md5($privateKey.$str)===$hash)
+ {
+ $options=unserialize($str);
+ $publicKey=$options['publicKey'];
+ $tokenLength=$options['tokenLength'];
+ $caseSensitive=$options['caseSensitive'];
+ $alphabet=$options['alphabet'];
+ $fontSize=$options['fontSize'];
+ $theme=$options['theme'];
+ if(($randomSeed=$options['randomSeed'])>0)
+ srand($randomSeed);
+ else
+ srand((int)(microtime()*1000000));
+ $token=generateToken($publicKey,$privateKey,$alphabet,$tokenLength,$caseSensitive);
+ }
+ }
+}
+
+displayToken($token,$fontSize,$theme);
+
+function generateToken($publicKey,$privateKey,$alphabet,$tokenLength,$caseSensitive)
+{
+ $token=substr(hash2string(md5($publicKey.$privateKey),$alphabet).hash2string(md5($privateKey.$publicKey),$alphabet),0,$tokenLength);
+ return $caseSensitive?$token:strtoupper($token);
+}
+
+function hash2string($hex,$alphabet)
+{
+ if(strlen($alphabet)<2)
+ $alphabet='234578adefhijmnrtABDEFGHJLMNRT';
+ $hexLength=strlen($hex);
+ $base=strlen($alphabet);
+ $result='';
+ for($i=0;$i<$hexLength;$i+=6)
+ {
+ $number=hexdec(substr($hex,$i,6));
+ while($number)
+ {
+ $result.=$alphabet[$number%$base];
+ $number=floor($number/$base);
+ }
+ }
+ return $result;
+}
+
+function displayToken($token,$fontSize,$theme)
+{
+ if(($fontSize=(int)$fontSize)<22)
+ $fontSize=22;
+ if($fontSize>100)
+ $fontSize=100;
+ $length=strlen($token);
+ $padding=10;
+ $fontWidth=$fontSize;
+ $fontHeight=floor($fontWidth*1.5);
+ $width=$fontWidth*$length+$padding*2;
+ $height=$fontHeight;
+ $image=imagecreatetruecolor($width,$height);
+
+ addBackground
+ (
+ $image, $width, $height,
+ $theme&THEME_OPAQUE_BACKGROUND,
+ $theme&THEME_NOISY_BACKGROUND,
+ $theme&THEME_HAS_GRID,
+ $theme&THEME_HAS_SCRIBBLE,
+ $theme&THEME_MORPH_BACKGROUND
+ );
+
+ $font=dirname(__FILE__).DIRECTORY_SEPARATOR.'verase.ttf';
+
+ if(function_exists('imagefilter'))
+ imagefilter($image,IMG_FILTER_GAUSSIAN_BLUR);
+
+ $hasShadow=($theme&THEME_SHADOWED_TEXT);
+ for($i=0;$i<$length;$i++)
+ {
+ $color=imagecolorallocate($image,rand(150,220),rand(150,220),rand(150,220));
+ $size=rand($fontWidth-10,$fontWidth);
+ $angle=rand(-30,30);
+ $x=$padding+$i*$fontWidth;
+ $y=rand($fontHeight-15,$fontHeight-10);
+ imagettftext($image,$size,$angle,$x,$y,$color,$font,$token[$i]);
+ if($hasShadow)
+ imagettftext($image,$size,$angle,$x+2,$y+2,$color,$font,$token[$i]);
+ imagecolordeallocate($image,$color);
+ }
+
+ header('Content-Type: image/png');
+ imagepng($image);
+ imagedestroy($image);
+}
+
+function addBackground($image,$width,$height,$opaque,$noisy,$hasGrid,$hasScribble,$morph)
+{
+ $background=imagecreatetruecolor($width*2,$height*2);
+ $white=imagecolorallocate($background,255,255,255);
+ imagefill($background,0,0,$white);
+
+ if($opaque)
+ imagefill($background,0,0,imagecolorallocate($background,100,100,100));
+
+ if($noisy)
+ addNoise($background,$width*2,$height*2);
+
+ if($hasGrid)
+ addGrid($background,$width*2,$height*2);
+
+ if($hasScribble)
+ addScribble($background,$width*2,$height*2);
+
+ if($morph)
+ morphImage($background,$width*2,$height*2);
+
+ imagecopy($image,$background,0,0,30,30,$width,$height);
+
+ if(!$opaque)
+ imagecolortransparent($image,$white);
+}
+
+function addNoise($image,$width,$height)
+{
+ for($x=0;$x<$width;++$x)
+ {
+ for($y=0;$y<$height;++$y)
+ {
+ if(rand(0,100)<25)
+ {
+ $color=imagecolorallocate($image,rand(150,220),rand(150,220),rand(150,220));
+ imagesetpixel($image,$x,$y,$color);
+ imagecolordeallocate($image,$color);
+ }
+ }
+ }
+}
+
+function addGrid($image,$width,$height)
+{
+ for($i=0;$i<$width;$i+=rand(15,25))
+ {
+ imagesetthickness($image,rand(2,6));
+ $color=imagecolorallocate($image,rand(100,180),rand(100,180),rand(100,180));
+ imageline($image,$i+rand(-10,20),0,$i+rand(-10,20),$height,$color);
+ imagecolordeallocate($image,$color);
+ }
+ for($i=0;$i<$height;$i+=rand(15,25))
+ {
+ imagesetthickness($image,rand(2,6));
+ $color=imagecolorallocate($image,rand(100,180),rand(100,180),rand(100,180));
+ imageline($image,0,$i+rand(-10,20),$width,$i+rand(-10,20),$color);
+ imagecolordeallocate($image,$color);
+ }
+}
+
+function addScribble($image,$width,$height)
+{
+ for($i=0;$i<8;$i++)
+ {
+ $color=imagecolorallocate($image,rand(100,180),rand(100,180),rand(100,180));
+ $points=array();
+ for($j=1;$j<rand(5,10);$j++)
+ {
+ $points[]=rand(2*(20*($i+1)),2*(50*($i+1)));
+ $points[]=rand(30,$height+30);
+ }
+ imagesetthickness($image,rand(2,6));
+ imagepolygon($image,$points,intval(sizeof($points)/2),$color);
+ imagecolordeallocate($image,$color);
+ }
+}
+
+function morphImage($image,$width,$height)
+{
+ $tempImage=imagecreatetruecolor($width,$height);
+ $chunk=rand(1,5);
+ for($x=$y=0;$x<$width;$x+=$chunk)
+ {
+ $chunk=rand(1,5);
+ $y+=rand(-1,1);
+ if($y>=$height) $y=$height-5;
+ if($y<0) $y=5;
+ imagecopy($tempImage,$image,$x,0,$x,$y,$chunk,$height);
+ }
+ for($x=$y=0;$y<$height;$y+=$chunk)
+ {
+ $chunk=rand(1,5);
+ $x+=rand(-1,1);
+ if($x>=$width) $x=$width-5;
+ if($x<0) $x=5;
+ imagecopy($image,$tempImage,$x,$y,0,$y,$width,$chunk);
+ }
+}
+