<?php

// Staring straight up into the sky ... oh my my
error_reporting(-1);
mb_internal_encoding('utf-8');


/* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
function inclineWord($number) {
     $last2Digits = $number % 100;
     $lastDigit = $number % 10;
     $word1 = " ($number) рубль";
     $word2 = " ($number) рубля";
     $word5 = " ($number) рублей";
     if($last2Digits >= 10 && $last2Digits <= 19){
     	return $word5;
     }
     elseif($lastDigit >= 5 && $lastDigit <= 9){
     	return $word5;
     }
     elseif($lastDigit == 1){
     	return $word1;
     }
     elseif($lastDigit >= 2 && $lastDigit <= 4){
     	return $word2;
     }
}

function smallNumberToText($number, $isFemale) {

    $spelling = array(
    	                                     10  =>  'десять',       100 =>  'сто',
        1   =>  'один',         11  =>  'одиннадцать',      20  =>  'двадцать',     200 =>  'двести',
        2   =>  'два',          12  =>  'двенадцать',       30  =>  'тридцать',     300 =>  'триста',
        3   =>  'три',          13  =>  'тринадцать',       40  =>  'сорок',        400 =>  'четыреста',
        4   =>  'четыре',       14  =>  'четырнадцать',     50  =>  'пятьдесят',    500 =>  'пятьсот',
        5   =>  'пять',         15  =>  'пятнадцать',       60  =>  'шестьдесят',   600 =>  'шестьсот',
        6   =>  'шесть',        16  =>  'шестнадцать',      70  =>  'семьдесят',    700 =>  'семьсот',    
        7   =>  'семь',         17  =>  'семнадцать',       80  =>  'восемьдесят',   800 =>  'восемьсот',
        8   =>  'восемь',       18  =>  'восемнадцать',     90  =>  'девяносто',     900 =>  'девятьсот',
        9   =>  'девять',       19  =>  'девятнадцать'    
    );
    
    $femaleSpelling = array(
        1   =>  'одна',        2   =>  'две'
    );
    $res = "";
    if($isFemale == 1){
    	$first = floor($number / 100)*100;
    	$second = floor(($number - $first)/10)*10;
    	$third = $number % 10;
    	if((($second < 11 && $second > 19) || $second == 0) && $first != 0){
    	return  $spelling[$first]." ".$femaleSpelling[$third];
    	}
    	
    	elseif($first == 0){
    		return $spelling[$second]." ".$femaleSpelling[$third];
    	}
    	elseif($first == 0 && $second == 0){
    		return $femaleSpelling[$third];
    	}
    	else{
    	return  $spelling[$first]." ".$spelling[$second]." ".$femaleSpelling[$third];	
    	}}
    elseif($number % 100 == 0){
    	return $spelling[$number];
    }
    elseif($number >=1 && $number <= 19){
    	return $spelling[$number];
    }
    elseif($number >= 20 && $number <= 99){
    	$first = floor($number/10)*10;
    	$second = $number - $first;
    	$res = $spelling[$first]." ".$spelling[$second];
    	return $res;
    }
    else{
    	$first = floor($number / 100)*100;
    	$third = $number - ($first + $second);
    	if((($number - $first)>=11) && (($number-$first))<=19){
    		$second = $number - $first;
    		$res = $spelling[$first]." ".$spelling[$second];
    	}
    	else{
    		$second = floor(($number - $first)/10)*10;
    		$third = $number - ($first + $second);
    		if(($first != 0)&&($second != 0)&&($third != 0)){
    			$res = $spelling[$first]." ".$spelling[$second]." ".$spelling[$third];
    		}
    		elseif($second == 0){
    			$res = $spelling[$first]." ".$spelling[$third];
    		}
    		elseif($third == 0){
    			$res = $spelling[$first]." ".$spelling[$second];
    		}
    	}
    	
    	return $res;
    
    }
}
function Thousand($number){
	
		$result = "";
		$ending = "";
		if($number < 1000){
			return smallNumberToText($number);
		}
		
		if((((((floor($number / 1000)%10>= 5) && (floor($number / 1000)%10 <= 9 ))||(floor($number / 1000)%100 >= 10 && floor($number / 1000)%100 <= 19))||(floor($number / 1000) % 10 == 0)))){
			$ending = "ч";
		}
		elseif((floor($number / 1000)%10 == 1) && ((floor($number / 1000) % 100)!= 11)){
			$ending = "ча";
			$fem = 1;
		}
		elseif((floor($number / 1000)%10 == 2) && (floor($number / 1000) % 100) != 12){
			$ending = "чи";
			$fem = 1;
		}
		elseif((floor($number / 1000)%10 >= 2 && (floor($number / 1000)%10 <= 4))){
			$ending = "чи";
		}
		$result = smallNumberToText(floor($number/1000), $fem)." тыся$ending ".smallNumberToText($number - (floor($number/1000)*1000));
		return $result;
	}
	function Million($number){
		$ending = "";
		$mill = floor($number / 1000000);
		$fem = 0;
		if(((((floor($number / 1000000)%10>= 5) && (floor($number / 1000000)%10 <= 9 || floor($number / 1000000)%100 >= 10 && floor($number / 1000000)%100 <= 19)||floor($number / 1000000) % 10 == 0)))){
			$ending = "ов";
		}
		elseif(floor($number / 1000000)%10 == 1){
			$ending = "";
	}
		elseif(floor($number / 1000000)%10 >= 2 && floor($number / 1000000)%10 <= 4){
			$ending = "а";
		}
		return smallNumberToText($mill, $fem)." миллион$ending ".Thousand($number - (floor($number / 1000000)*1000000));
	}
function numberToText($number) {
	if($number == 0){
		$result = "ноль";
	}
	
   elseif($number <= 999){
   		$result = smallNumberToText($number);
}
	elseif(($number >= 1000)&&($number <= 999999)){
		$result = Thousand($number);
	}
	elseif($number >= 1000000 && $number <= 99999999){
		$result = Million($number);
	}
	return $result.inclineWord($number);
	}
	

/* Вызовем функцию несколько раз */
$amount1 = 2000001;
$text1 = numberToText($amount1);

echo "На вашем счету {$text1}\n";

$amount2 = mt_rand(1,9999999);
$text2 = numberToText($amount2);

echo "На вашем счету {$text2}\n";

$amount3 = mt_rand(1,99999999);
$text3 = numberToText($amount3);

echo "На вашем счету {$text3}\n";

$amount4 = mt_rand(1,99999999);
$text4 = numberToText($amount4);

echo "На вашем счету {$text4}\n";

