128 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
<?php
 | 
						||
 | 
						||
 | 
						||
namespace App\Http\Controllers\Api\V1;
 | 
						||
 | 
						||
use App\Http\Controllers\Controller;
 | 
						||
 | 
						||
 | 
						||
class IndexController extends Controller
 | 
						||
{
 | 
						||
    public function index()
 | 
						||
    {
 | 
						||
        $cd = intval($_GET["cd"]);
 | 
						||
        $text = str($_GET["text"]);
 | 
						||
        $shift = intval($_GET["shift"]);
 | 
						||
        $language = str($_GET["language"]);
 | 
						||
        $shift = $this->normalizeShift($shift, $language);
 | 
						||
        $result_text = '';
 | 
						||
        if ($language == 'Ru'){
 | 
						||
            if ($cd == 0){
 | 
						||
                $result_text = $this->ruEncipher($text, $shift);
 | 
						||
            } elseif ($cd == 1){
 | 
						||
                $result_text = $this->ruDecipher($text, $shift);
 | 
						||
            }
 | 
						||
        } elseif ($language == 'En') {
 | 
						||
            if ($cd == 0){
 | 
						||
                $result_text = $this->enEncipher($text, $shift);
 | 
						||
            } elseif ($cd == 1){
 | 
						||
                $result_text = $this->enDecipher($text, $shift);
 | 
						||
            }
 | 
						||
        }
 | 
						||
        return $result_text;
 | 
						||
    }
 | 
						||
 | 
						||
    public function normalizeShift($shift, $alphabet)
 | 
						||
    {
 | 
						||
        if ($alphabet == 'Ru'){
 | 
						||
            if ($shift > 32){
 | 
						||
                while ($shift > 32)
 | 
						||
                {
 | 
						||
                    $shift = $shift - 32;
 | 
						||
                }
 | 
						||
            }
 | 
						||
            return $shift;
 | 
						||
        } elseif ($alphabet == 'En') {
 | 
						||
            if ($shift > 26){
 | 
						||
                while ($shift > 26)
 | 
						||
                {
 | 
						||
                    $shift = $shift - 26;
 | 
						||
                }
 | 
						||
            }
 | 
						||
            return $shift;
 | 
						||
        }
 | 
						||
    }
 | 
						||
 | 
						||
    public function enCipher($ch, $key)
 | 
						||
    {
 | 
						||
        if (!ctype_alpha($ch))
 | 
						||
            return $ch;
 | 
						||
 | 
						||
        $offset = ord(ctype_upper($ch) ? 'A' : 'a');
 | 
						||
        return chr(fmod(((ord($ch) + $key) - $offset), 26) + $offset);
 | 
						||
    }
 | 
						||
 | 
						||
    public function enEncipher($input, $key)
 | 
						||
    {
 | 
						||
        $output = "";
 | 
						||
 | 
						||
        $inputArr = str_split($input);
 | 
						||
        foreach ($inputArr as $ch)
 | 
						||
            $output .= $this->enCipher($ch, $key);
 | 
						||
        return $output;
 | 
						||
    }
 | 
						||
 | 
						||
    public function enDecipher($input, $key)
 | 
						||
    {
 | 
						||
        return $this->enEncipher($input, 26 - $key);
 | 
						||
    }
 | 
						||
 | 
						||
    public function ruCipher($ch, $key)
 | 
						||
    {
 | 
						||
        $regexp = "/[А-ЯЁа-яё]/";
 | 
						||
        $regexp_upper = "/[А-ЯЁ]\{Lu}/";
 | 
						||
        if (!preg_match($regexp, $ch))
 | 
						||
        {
 | 
						||
            return $ch;
 | 
						||
        }
 | 
						||
 | 
						||
        $offset = mb_ord(preg_match($regexp_upper, $ch) ? 'А' : 'а', "UTF-8");
 | 
						||
        return mb_chr(fmod(((mb_ord($ch, "UTF-8") + $key) - $offset), 32) + $offset, "UTF-8");
 | 
						||
    }
 | 
						||
 | 
						||
    function ruCipherReverse($ch, $key)
 | 
						||
    {
 | 
						||
        $regexp = "/[А-ЯЁа-яё]/";
 | 
						||
        $regexp_upper = "/[А-ЯЁ]\{Lu}/";
 | 
						||
        if (!preg_match($regexp, $ch))
 | 
						||
        {
 | 
						||
            return $ch;
 | 
						||
        }
 | 
						||
 | 
						||
        $offset = mb_ord(preg_match($regexp_upper, $ch) ? 'А' : 'а', "UTF-8");
 | 
						||
        return mb_chr(fmod(((mb_ord($ch, "UTF-8") - $key) - $offset), 32) + $offset, "UTF-8");
 | 
						||
    }
 | 
						||
 | 
						||
    public function ruEncipher($input, $key)
 | 
						||
    {
 | 
						||
        $output = "";
 | 
						||
 | 
						||
        $inputArr = mb_str_split($input, 1, "UTF-8");
 | 
						||
        foreach ($inputArr as $ch)
 | 
						||
            $output .= $this->ruCipher($ch, $key);
 | 
						||
 | 
						||
        return $output;
 | 
						||
    }
 | 
						||
 | 
						||
    public function ruDecipher($input, $key)
 | 
						||
    {
 | 
						||
        $output = "";
 | 
						||
 | 
						||
        $inputArr = mb_str_split($input, 1, "UTF-8");
 | 
						||
        foreach ($inputArr as $ch)
 | 
						||
            $output .= $this->ruCipherReverse($ch, $key);
 | 
						||
 | 
						||
        return $output;
 | 
						||
    }
 | 
						||
}
 |