<?php
	$Названия_до_20 = [
		['один', 'одна'], ['два', 'две'], 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять',
		'десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать'
	];
	
	$Названия_десятков = ['двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто'];

	$Названия_сотен = ['сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот'];

	$Названия_степеней_тысячи = [['тысяча', 'тысячи', 'тысяч', 1], ['миллион', 'миллиона', 'миллионов', 0], ['миллиард', 'миллиарда', 'миллиардов', 0]];

	function Разобрать_три_разряда($число, $род = 0) {
		global $Названия_до_20, $Названия_десятков, $Названия_сотен;
		while ($число > 0) {
			$разряды[] = $число % 10; $число = intval($число / 10);
		}
		while (count($разряды) < 3) $разряды[] = 0;
		$дес_ед = $разряды[1] * 10 + $разряды[0];
		if ($разряды[2] > 0)
			$результат[] = $Названия_сотен[$разряды[2] - 1];
		if ($дес_ед > 0) {
			if ($дес_ед < 20)
				$результат[] = ($дес_ед > 2 ?
					$Названия_до_20[$дес_ед - 1] :
					$Названия_до_20[$дес_ед - 1][$род]
				);
			else {
				$результат[] = $Названия_десятков[$разряды[1] - 2];
				$результат[] = ($разряды[0] > 2 ?
					$Названия_до_20[$разряды[0] - 1] :
					$Названия_до_20[$разряды[0] - 1][$род]
				);
			}
		}
		return implode(' ', $результат);
	}

	function Склонение_после_числительного($ч, $с) {
		return
			($ч % 100 >= 5 && $ч % 100 <= 20) ?
				$с[2] :
				(($ч % 10 == 1) ?
					$с[0] :
					(($ч % 10 >= 2 && $ч % 10 <= 4) ?
						$с[1] :
						$с[2]
					)
				);
	}

	function Число_текстом($число) {
		global $Названия_степеней_тысячи;
		$сч_степ = 0;
		while ($число > 0) {
			$три_разряда = $число % 1000;
			$результат[] = ($сч_степ > 0 ?
				Разобрать_три_разряда($три_разряда, $Названия_степеней_тысячи[$сч_степ - 1][3]) . ' ' .
				Склонение_после_числительного($три_разряда, $Названия_степеней_тысячи[$сч_степ - 1]) :
				Разобрать_три_разряда($три_разряда)
			);
			$число = intval($число / 1000);
			$сч_степ++;
		}
		return implode(' ', array_reverse($результат));
	}

	$сл_ч = mt_rand(1, 99999999);
	echo
		'На вашем счёте ' . Число_текстом($сл_ч) . ' (' . $сл_ч . ') ' .
		Склонение_после_числительного($сл_ч, ['рубль', 'рубля', 'рублей']) . '.';
?>