fork download
  1. <?php
  2.  
  3. $isFemale=0;
  4.  
  5. function smallNumberToText($number, $isFem) {
  6.  
  7. $spelling = array(
  8.  
  9. 0 => '', 10 => 'десять', 100 => 'сто',
  10.  
  11. 1 => 'один', 11 => 'одиннадцать', 20 => 'двадцать', 200 => 'двести',
  12.  
  13. 2 => 'два', 12 => 'двенадцать', 30 => 'тридцать', 300 => 'триста',
  14.  
  15. 3 => 'три', 13 => 'тринадцать', 40 => 'сорок', 400 => 'четыреста',
  16.  
  17. 4 => 'четыре', 14 => 'четырнадцать', 50 => 'пятьдесят', 500 => 'пятьсот',
  18.  
  19. 5 => 'пять', 15 => 'пятнадцать', 60 => 'шестьдесят', 600 => 'шестьсот',
  20.  
  21. 6 => 'шесть', 16 => 'шестнадцать', 70 => 'семьдесят', 700 => 'семьсот',
  22.  
  23. 7 => 'семь', 17 => 'семнадцать', 80 => 'восемьдесят', 800 => 'восемьсот',
  24.  
  25. 8 => 'восемь', 18 => 'восемнадцать', 90 => 'девяносто', 900 => 'девятьсот',
  26.  
  27. 9 => 'девять', 19 => 'девятнадцать'
  28.  
  29. );
  30.  
  31.  
  32. $femaleSpelling = array(
  33.  
  34. 1 => 'одна', 2 => 'две'
  35.  
  36. );
  37.  
  38. if ((($number==1) || ($number)==2) && ($isFem==1))
  39. echo $femaleSpelling[$number]." ";
  40. else
  41. echo $spelling[$number]." ";
  42.  
  43. }
  44.  
  45.  
  46. function numberToText($number) {//разбивает число на сотни/тысячи/миллионы и передает в функцию отсылающую значение в smallNumberToText
  47.  
  48. $len=strlen($number);
  49. if ($len<=3)
  50. {$GLOBALS['isFemale']=0;
  51. nameIt($number);}
  52.  
  53. elseif ($len>3 && $len<=6)
  54. {
  55. settype($number,"string");//этот пиздец
  56. if ($number[strlen($number)-4]==1)//проверяет последние цифры
  57. $GLOBALS['isFemale']=1;//тысяч
  58. elseif($number[strlen($number)-4]==2) //и меняет
  59. $GLOBALS['isFemale']=1;//род
  60. else// на женский
  61. $GLOBALS['isFemale']=0;
  62. nameIt(floor($number/1000));
  63.  
  64.  
  65. settype($number,"string");//этот пиздец
  66. if ($number[strlen($number)-4]==1)//проверяет последние цифры
  67. echo "тысяча ";//тысяч
  68. elseif($number[strlen($number)-4]==2)//и меняет
  69. echo "тысячи ";//"тысяч" на "тысячи"
  70. else //в зависимости от рода
  71. {echo " тысяч ";
  72. $GLOBALS['isFemale']=0;}
  73. numberToText($number-(floor($number/1000))*1000);
  74. }
  75.  
  76. elseif ($len>6 && $len<=9)
  77. {
  78. nameIt(floor($number/1000000));
  79. settype($number,"string");//этот пиздец
  80. if ($number[strlen($number)-7]==1)//проверяет последние цифры
  81. echo " миллион ";//миллионов
  82. elseif ($number[strlen($number)-7]>=2 && $number[strlen($number)-7]<=4)//и выбирает
  83. echo " миллиона ";//нужную форму
  84. else
  85. echo " миллионов ";
  86. numberToText($number-(floor($number/1000000))*1000000);
  87. $GLOBALS['isFemale']=0;
  88. }
  89. else die("ERROR! length=$len");
  90.  
  91. }
  92.  
  93.  
  94. function nameIt($value)//передает значения в smallNumberToText с учетом исключений
  95. {
  96.  
  97. $len=strlen($value);
  98. $A=(string)$value;
  99. switch ($len)
  100. {
  101. case "3":
  102. smallNumberToText($A[0]*100,$GLOBALS['isFemale']);
  103. if (($A[1].$A[2])=="00") break;//100,200..900
  104. if (($A[1].$A[2])>="10" && ($A[1].$A[2])<="19") {smallNumberToText($A[1].$A[2],$GLOBALS['isFemale']); break;}//11,12..19
  105. smallNumberToText($A[1]*10,$GLOBALS['isFemale']);
  106. smallNumberToText($A[2],$GLOBALS['isFemale']); break;
  107.  
  108. case "2":
  109. if (($A[0].$A[1])>="10" && ($A[0].$A[1])<="19") {smallNumberToText($A[0].$A[1],$GLOBALS['isFemale']); break;}//11,12..19
  110. smallNumberToText($A[0]*10,$GLOBALS['isFemale']);
  111. smallNumberToText($A[1],$GLOBALS['isFemale']); break;
  112.  
  113. case "1":
  114. smallNumberToText($A[0],$GLOBALS['isFemale']); break;
  115. }
  116.  
  117. }
  118.  
  119. function addRubles($value)
  120. {
  121. $length=strlen($value);
  122. settype($value,"string");
  123. $lastNumber=$value[$length-2].$value[$length-1];
  124. if ($lastNumber>="02" && $lastNumber<="04")
  125. echo " рубля.";
  126. elseif ($lastNumber=="01")
  127. echo " рубль.";
  128. elseif (($lastNumber>="05" && $lastNumber<="09"))
  129. echo " рублей.";
  130. elseif ($lastNumber>="10" && $lastNumber<="20")
  131. echo " рублей.";
  132. elseif ($value[$length-1]=="1" && $value[$length-2]!="1")
  133. echo " рубль.";
  134. elseif (($value[$length-1]>="2" && $value[$length-1]<="4")&&($value[$length-2]!="2"||$value[$length-2]!="0"))
  135. echo " рубля.";
  136. else
  137. echo " рублей.";
  138.  
  139. }
  140.  
  141.  
  142. $amount1 = mt_rand(1,99999999);
  143. echo "На вашем счету ($amount1) ",numberToText($amount1),addRubles($amount1),"\n";
  144.  
  145. $amount2 = mt_rand(1,99999999);
  146. echo "На вашем счету ($amount2) ",numberToText($amount2),addRubles($amount2),"\n";
  147.  
  148. $amount3 = mt_rand(1,99999999);
  149. echo "На вашем счету ($amount3) ",numberToText($amount3),addRubles($amount3),"\n";
  150.  
  151. $amount4 = mt_rand(1,99999999);
  152. echo "На вашем счету ($amount4) ",numberToText($amount4),addRubles($amount4),"\n";
Success #stdin #stdout 0.01s 20520KB
stdin
Standard input is empty
stdout
На вашем счету (27710978) двадцать семь  миллионов семьсот десять  тысяч девятьсот семьдесят восемь  рублей.
На вашем счету (83290158) восемьдесят три  миллиона двести девяносто   тысяч сто пятьдесят восемь  рублей.
На вашем счету (7960445) семь  миллионов девятьсот шестьдесят   тысяч четыреста сорок пять  рублей.
На вашем счету (97386688) девяносто семь  миллионов триста восемьдесят шесть  тысяч шестьсот восемьдесят восемь  рублей.