Файл: wboard/source/system/controller/captcha.php
Строк: 49
<?php
/**
* Wboard
* Captcha
* @author Screamer
* @copyright 2013
*/
class Module_Captcha extends Module
{
/**
* Display image and set code to session ($_SESSION['captcha'])
* @return (void)
*/
public function index()
{
header("Content-type: image/png");
$this->display = FALSE;
$data = $this->render();
$_SESSION['captcha'] = $data[0];
imagepng($data[1]);
}
/**
* Generate code. Create image
* @return (array) [code], [image]
*/
protected function render()
{
// List of symbols
$alphabet = '012345789';
$alphabet = preg_split('//u', $alphabet, -1, PREG_SPLIT_NO_EMPTY);
$a_length = count($alphabet) - 1;
// Length of string
$max_len = rand(3, 6);
// Load font
$font = $this->path . 'files' . DIRECTORY_SEPARATOR . 'consola.ttf';
// Create image
$image = imagecreatetruecolor(160, 40);
// Set background
imagefill($image, 0, 0, imagecolorallocate($image, 255, 255, 255));
// Draw text
$code = '';
for ($i = 0, $x = 15; $i < $max_len; $i++, $x += 14) {
$color = imagecolorallocate($image, rand(10, 50), rand(10, 50), rand(10, 50));
$symbol = $alphabet[rand(0, $a_length)];
$code .= $symbol;
imagefttext($image, rand(18, 20), rand(-30, 30), $x, rand(20, 30), $color, $font, $symbol);
}
// Noise
for ($i = 0, $x = 15; $i < $max_len; $i++, $x += 18) {
$color = imagecolorallocate($image, rand(200, 220), rand(200, 220), rand(200, 220));
imagefttext($image, rand(18, 20), rand(-30, 30), $x, rand(20, 30), $color, $font, $alphabet[rand(0, $a_length)]);
}
return array($code, $image);
}
}