HuasoFoundries/jpgraph

View on GitHub
src/image/AntiSpam.php

Summary

Maintainability
A
2 hrs
Test Coverage
<?php

/**
 * JPGraph v4.0.3
 */

namespace Amenadiel\JpGraph\Image;

/**
 * // File:        JPGRAPH_ANTISPAM.PHP
 * // Description: Genarate anti-spam challenge
 * // Created:     2004-10-07
 * // Ver:         $Id: jpgraph_antispam.php 1106 2009-02-22 20:16:35Z ljp $
 * //
 * // Copyright (c) Asial Corporation. All rights reserved.
 */
class AntiSpam
{
    private $iData = '';
    private $iDD;

    public function __construct($aData = '')
    {
        $this->iData = $aData;
        $this->iDD   = new HandDigits();
    }

    public function Set($aData)
    {
        $this->iData = $aData;
    }

    public function Rand($aLen)
    {
        $d = '';
        for ($i = 0; $i < $aLen; ++$i) {
            if (rand(0, 9) < 6) {
                // Digits
                $d .= chr(ord('1') + rand(0, 8));
            } else {
                // Letters
                do {
                    $offset = rand(0, 25);
                } while ($offset == 14);
                $d .= chr(ord('a') + $offset);
            }
        }
        $this->iData = $d;

        return $d;
    }

    public function Stroke()
    {
        $n = strlen($this->iData);
        if ($n == 0) {
            return false;
        }

        for ($i = 0; $i < $n; ++$i) {
            if ($this->iData[$i] === '0' || strtolower($this->iData[$i]) === 'o') {
                return false;
            }
        }

        $img = @imagecreatetruecolor($n * $this->iDD->iWidth, $this->iDD->iHeight);
        if ($img < 1) {
            return false;
        }

        $start = 0;
        for ($i = 0; $i < $n; ++$i) {
            $dimg = imagecreatefromstring(base64_decode($this->iDD->chars[strtolower($this->iData[$i])][1], true));
            imagecopy($img, $dimg, $start, 0, 0, 0, imagesx($dimg), $this->iDD->iHeight);
            $start += imagesx($dimg);
        }
        $resimg = @imagecreatetruecolor($start + 4, $this->iDD->iHeight + 4);
        if ($resimg < 1) {
            return false;
        }

        imagecopy($resimg, $img, 2, 2, 0, 0, $start, $this->iDD->iHeight);
        header('Content-type: image/jpeg');
        imagejpeg($resimg);

        return true;
    }
}