| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | <?phpclass LtCaptcha{	public $configHandle;	public $storeHandle;	public $imageEngine;	public function __construct()	{		if (! $this->configHandle instanceof LtConfig)		{			if (class_exists("LtObjectUtil", false))			{				$this->configHandle = LtObjectUtil::singleton("LtConfig");			}			else			{				$this->configHandle = new LtConfig;			}		}	}	public function init()	{		if (!is_object($this->storeHandle))		{			$this->storeHandle = new LtStoreFile;			$this->storeHandle->prefix = 'LtCaptcha-seed-';			$this->storeHandle->init();		}	}	public function getImageResource($seed)	{		if (empty($seed))		{			trigger_error("empty seed");			return false;		}		if (!is_object($this->imageEngine))		{			if ($imageEngine = $this->configHandle->get("captcha.image_engine"))			{				if (class_exists($imageEngine))				{					$this->imageEngine = new $imageEngine;					$this->imageEngine->conf = $this->configHandle->get("captcha.image_engine_conf");				}				else				{					trigger_error("captcha.image_engine : $imageEngine not exists");				}			}			else			{				trigger_error("empty captcha.image_engine");				return false;			}		}		$word = $this->generateRandCaptchaWord($seed);		$this->storeHandle->add($seed, $word);		return $this->imageEngine->drawImage($word);	}	public function verify($seed, $userInput)	{		if ($word = $this->storeHandle->get($seed))		{			$this->storeHandle->del($seed);			return $userInput === $word;		}		else		{			return false;		}	}	protected function generateRandCaptchaWord()	{		$allowChars = $this->configHandle->get("captcha.allow_chars");		$length = $this->configHandle->get("captcha.length");		$allowedSymbolsLength = strlen($allowChars) - 1;		$captchaWord = "";		for ($i = 0; $i < $length; $i ++)		{			$captchaWord .= $allowChars[mt_rand(0, $allowedSymbolsLength)];		}		return $captchaWord;	}}
 |