<?php
error_reporting(-1);

function smallNumbers($number, $isFemale) {
	$spelling = array(
        0   =>  'ноль ',                            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   =>  'две '
    );
    
    $result = '';
    $hundreds = 0; $tens = 0; $ones = 0;
    
    $hundreds = (floor($number/100))*100;
    if ($hundreds >= 100) {
    	$result .= $spelling[$hundreds];
    } 
    
    $remains = $number - $hundreds;
    
    if ($remains >= 20) {
    	$tens = (floor($remains/10))*10;
    	$result .= $spelling[$tens];
    	
    	$ones = $remains - $tens;
    	if (($ones < 3) & ($ones > 0) & ($isFemale == true)) {
    		$result .= $femaleSpelling[$ones];
    	} elseif ($ones > 0) {
    		$result .= $spelling[$ones];
    	} 
    } elseif (($remains < 20) & ($remains > 0) & ($isFemale == false)) {
    	$result .= $spelling[$remains];
    } elseif (($remains < 3) & ($remains > 0) & ($isFemale == true)) {
    	$result .= $femaleSpelling[$remains]; 
    } elseif ($remains > 0) {
    	$result .= $spelling[$remains];
    }
    
    return $result;
}    

function typer($number) {

	if ($number == 0) {
		$typeTotal = "ноль рублей";
	} else {
		$typeTotal = "";
	    $millions = floor($number/1000000);
		$typeMillions = smallNumbers($millions, false);
		$lastMillion = $millions % 10;
		if ($lastMillion == 1) {
			$typeMillions .= "миллион ";
		} elseif (($lastMillion > 1) & ($lastMillion < 5)) {
			$typeMillions .= "миллиона ";
		} elseif (($lastMillion >= 5) or (($lastMillion == 0) & ($millions > 0))) {
			$typeMillions .= "миллионов ";
		}

		$typeTotal .= $typeMillions;

		$thousands = floor(($number - $millions*1000000)/1000);
		$typeThousands = smallNumbers($thousands, true);
		$lastThousand = $thousands % 10;
		if ($lastThousand == 1) {
			$typeThousands .= "тысяча ";
		} elseif (($lastThousand > 1) & ($lastThousand < 5)) {
			$typeThousands .= "тысячи ";
		} elseif (($lastThousand >= 5) or (($lastThousand == 0) & ($thousands > 0))) {
			$typeThousands .= "тысяч ";
		}
	
		$typeTotal .= $typeThousands;	

		$ones = $number % 1000;
		$typeOnes = smallNumbers($ones, false);
		$lastOne = $ones % 10;
		if ($lastOne == 1) {
			$typeOnes .= "рубль";
		} elseif (($lastOne > 1) & ($lastOne < 5)) {
			$typeOnes .= "рубля";
		} elseif (($lastOne >= 5) or ($lastOne == 0)) {
			$typeOnes .= "рублей";
		}	

		$typeTotal .= $typeOnes;
	}
	return $typeTotal;
}

function tests($n) {
	for ($i=0,$j=1; $i < $n; $i++, $j*=1.2) {
		
		$randomTestNumber = ceil(mt_rand(0, 999999999/$j));
		$typedTestNumber = typer($randomTestNumber);
		
		echo "$randomTestNumber - $typedTestNumber\n"; 
	}
}

tests(200);
