<?php
// Staring straight up into the sky ... oh my my
/* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
function inclineWord( $number , $word1 , $word2 , $word5 ) {
if ( $number % 100 == 11 || $number % 100 == 12 || $number % 100 == 13 || $number % 100 == 14 ) return $word5 ;
if ( $number % 10 == 1 ) return $word1 ;
if ( $number % 10 == 2 || $number % 10 == 3 || $number % 10 == 4 ) return $word2 ;
return $word5 ;
}
/*
Преобразует числа от 0 до 999 в текст. Параметр $isFemale равен нулю,
если мы считаем число для мужского рода (один рубль),
и 1 — для женского (одна тысяча)
*/
function smallNumberToText( $number , $isFemale ) {
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 => 'девятнадцать'
) ;
1 => 'одна' , 2 => 'две'
) ;
if ( $isFemale ) {
$spelling [ 1 ] = $femaleSpelling [ 1 ] ;
$spelling [ 2 ] = $femaleSpelling [ 2 ] ;
}
if ( $number < 20 ) {
return $spelling [ $number ] ;
} elseif ( $number < 100 && $number % 10 != 0 ) {
$units = $number % 10 ;
$dozens = $number - $units ;
return $spelling [ $dozens ] . " " . $spelling [ $units ] ;
} elseif ( $number < 100 && $number % 10 == 0 ) return $spelling [ $number ] ;
$hundreds = $number - $number % 100 ;
if ( $number % 100 < 20 && $number % 100 != 0 ) {
$dozens = $number % 100 ;
return $spelling [ $hundreds ] . " " . $spelling [ $dozens ] ;
} elseif ( $number % 100 == 0 ) {
return $spelling [ $hundreds ] ;
} elseif ( $number % 10 == 0 ) {
$dozens = $number % 100 ;
$hundreds = $number - $dozens ;
return $spelling [ $hundreds ] . " " . $spelling [ $dozens ] ;
}
$dozens = $number % 100 - $number % 10 ;
$units = $number % 10 ;
return $spelling [ $hundreds ] . " " . $spelling [ $dozens ] . " " . $spelling [ $units ] ;
}
function numberToText( $number ) {
if ( $number < 1000 ) {
return smallNumberToText( $number , 0 ) . " " . inclineWord( $number , "рубль" , "рубля" , "рублей" ) ;
} elseif ( $number < 1000000 ) {
$thousands = ( $number - $number % 1000 ) / 1000 ;
$hundreds = $number % 1000 ;
if ( $hundreds == 0 ) {
return smallNumberToText( $thousands , 1 ) . " " . inclineWord( $thousands , "тысяча" , "тысячи" , "тысяч" ) . " " . inclineWord( $number , "рубль" , "рубля" , "рублей" ) ;
}
return smallNumberToText( $thousands , 1 ) . " " . inclineWord( $thousands , "тысяча" , "тысячи" , "тысяч" ) . " " . smallNumberToText( $hundreds , 0 ) . " " . inclineWord( $number , "рубль" , "рубля" , "рублей" ) ;
} elseif ( $number < 1000000000 ) {
$millions = floor ( $number / 1000000 ) ; $thousands = floor ( ( $number % 1000000 ) / 1000 ) ; $hundreds = $number % 1000 ;
if ( $thousands == 0 && $hundreds == 0 ) {
return smallNumberToText( $millions , 0 ) . " " . inclineWord( $millions , "миллион" , "миллиона" , "миллионов" ) . " " . inclineWord( $number , "рубль" , "рубля" , "рублей" ) ;
} elseif ( $thousands == 0 ) {
return smallNumberToText( $millions , 0 ) . " " . inclineWord( $millions , "миллион" , "миллиона" , "миллионов" ) . " " . smallNumberToText( $hundreds , 0 ) . " " . inclineWord( $number , "рубль" , "рубля" , "рублей" ) ;
} elseif ( $hundreds == 0 ) {
return smallNumberToText( $millions , 0 ) . " " . inclineWord( $millions , "миллион" , "миллиона" , "миллионов" ) . " " . smallNumberToText( $thousands , 1 ) . " " . inclineWord( $thousands , "тысяча" , "тысячи" , "тысяч" ) . " " . inclineWord( $number , "рубль" , "рубля" , "рублей" ) ;
}
return smallNumberToText( $millions , 0 ) . " " . inclineWord( $millions , "миллион" , "миллиона" , "миллионов" ) . " " . smallNumberToText( $thousands , 1 ) . " " . inclineWord( $thousands , "тысяча" , "тысячи" , "тысяч" ) . " " . smallNumberToText( $hundreds , 0 ) . " " . inclineWord( $number , "рубль" , "рубля" , "рублей" ) ;
}
}
/* Вызовем функцию несколько раз */
$text1 = numberToText( $amount1 ) ;
echo "На вашем счету {$text1} \n " ;
$text2 = numberToText( $amount2 ) ;
echo "На вашем счету {$text2} \n " ;
$amount3 = 11012013 ;
$text3 = numberToText( $amount3 ) ;
echo "На вашем счету {$text3} \n " ;
$amount4 = 1000001 ;
$text4 = numberToText( $amount4 ) ;
echo "На вашем счету {$text4} \n " ;
$amount7 = 100000 ;
$text7 = numberToText( $amount7 ) ;
echo "На вашем счету {$text7} \n " ;
PD9waHAKCi8vIFN0YXJpbmcgc3RyYWlnaHQgdXAgaW50byB0aGUgc2t5IC4uLiBvaCBteSBteQplcnJvcl9yZXBvcnRpbmcoLTEpOwptYl9pbnRlcm5hbF9lbmNvZGluZygndXRmLTgnKTsKCgovKiDQktC+0LfQstGA0LDRidCw0LXRgiDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidGD0Y4g0YfQuNGB0LvRgyDRhNC+0YDQvNGDINGB0LvQvtCy0LA6IDEg0YDRg9Cx0LvRjCwgMiDRgNGD0LHQu9GPLCA1INGA0YPQsdC70LXQuSAqLwpmdW5jdGlvbiBpbmNsaW5lV29yZCgkbnVtYmVyLCAkd29yZDEsICR3b3JkMiwgJHdvcmQ1KSB7CglpZiAoJG51bWJlciAlIDEwMCA9PSAxMSB8fCAkbnVtYmVyICUgMTAwID09IDEyIHx8ICRudW1iZXIgJSAxMDAgPT0gMTMgfHwgJG51bWJlciAlIDEwMCA9PSAxNCkgcmV0dXJuICR3b3JkNTsKICAgIGlmICgkbnVtYmVyICUgMTAgPT0gMSkgcmV0dXJuICR3b3JkMTsKICAgIGlmICgkbnVtYmVyICUgMTAgPT0gMiB8fCAkbnVtYmVyICUgMTAgPT0gMyB8fCAkbnVtYmVyICUgMTAgPT0gNCkgcmV0dXJuICR3b3JkMjsKICAgIHJldHVybiAkd29yZDU7Cn0KCi8qIAogICAg0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDRh9C40YHQu9CwINC+0YIgMCDQtNC+IDk5OSDQsiDRgtC10LrRgdGCLiDQn9Cw0YDQsNC80LXRgtGAICRpc0ZlbWFsZSDRgNCw0LLQtdC9INC90YPQu9GOLCAKICAgINC10YHQu9C4INC80Ysg0YHRh9C40YLQsNC10Lwg0YfQuNGB0LvQviDQtNC70Y8g0LzRg9C20YHQutC+0LPQviDRgNC+0LTQsCAo0L7QtNC40L0g0YDRg9Cx0LvRjCksIAogICAg0LggMSDigJQg0LTQu9GPINC20LXQvdGB0LrQvtCz0L4gKNC+0LTQvdCwINGC0YvRgdGP0YfQsCkgCiovCmZ1bmN0aW9uIHNtYWxsTnVtYmVyVG9UZXh0KCRudW1iZXIsICRpc0ZlbWFsZSkgewoKICAgICRzcGVsbGluZyA9IGFycmF5KAogICAgICAgIDAgICA9PiAgJ9C90L7Qu9GMJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgID0+ICAn0LTQtdGB0Y/RgtGMJywgICAgICAgMTAwID0+ICAn0YHRgtC+JywKICAgICAgICAxICAgPT4gICfQvtC00LjQvScsICAgICAgICAgMTEgID0+ICAn0L7QtNC40L3QvdCw0LTRhtCw0YLRjCcsICAgICAgMjAgID0+ICAn0LTQstCw0LTRhtCw0YLRjCcsICAgICAyMDAgPT4gICfQtNCy0LXRgdGC0LgnLAogICAgICAgIDIgICA9PiAgJ9C00LLQsCcsICAgICAgICAgIDEyICA9PiAgJ9C00LLQtdC90LDQtNGG0LDRgtGMJywgICAgICAgMzAgID0+ICAn0YLRgNC40LTRhtCw0YLRjCcsICAgICAzMDAgPT4gICfRgtGA0LjRgdGC0LAnLAogICAgICAgIDMgICA9PiAgJ9GC0YDQuCcsICAgICAgICAgIDEzICA9PiAgJ9GC0YDQuNC90LDQtNGG0LDRgtGMJywgICAgICAgNDAgID0+ICAn0YHQvtGA0L7QuicsICAgICAgICA0MDAgPT4gICfRh9C10YLRi9GA0LXRgdGC0LAnLAogICAgICAgIDQgICA9PiAgJ9GH0LXRgtGL0YDQtScsICAgICAgIDE0ICA9PiAgJ9GH0LXRgtGL0YDQvdCw0LTRhtCw0YLRjCcsICAgICA1MCAgPT4gICfQv9GP0YLRjNC00LXRgdGP0YInLCAgICA1MDAgPT4gICfQv9GP0YLRjNGB0L7RgicsCiAgICAgICAgNSAgID0+ICAn0L/Rj9GC0YwnLCAgICAgICAgIDE1ICA9PiAgJ9C/0Y/RgtC90LDQtNGG0LDRgtGMJywgICAgICAgNjAgID0+ICAn0YjQtdGB0YLRjNC00LXRgdGP0YInLCAgIDYwMCA9PiAgJ9GI0LXRgdGC0YzRgdC+0YInLAogICAgICAgIDYgICA9PiAgJ9GI0LXRgdGC0YwnLCAgICAgICAgMTYgID0+ICAn0YjQtdGB0YLQvdCw0LTRhtCw0YLRjCcsICAgICAgNzAgID0+ICAn0YHQtdC80YzQtNC10YHRj9GCJywgICAgNzAwID0+ICAn0YHQtdC80YzRgdC+0YInLCAgICAKICAgICAgICA3ICAgPT4gICfRgdC10LzRjCcsICAgICAgICAgMTcgID0+ICAn0YHQtdC80L3QsNC00YbQsNGC0YwnLCAgICAgICA4MCAgPT4gICfQstC+0YHQtdC80YzQtNC10YHRj9GCJywgICA4MDAgPT4gICfQstC+0YHQtdC80YzRgdC+0YInLAogICAgICAgIDggICA9PiAgJ9Cy0L7RgdC10LzRjCcsICAgICAgIDE4ICA9PiAgJ9Cy0L7RgdC10LzQvdCw0LTRhtCw0YLRjCcsICAgICA5MCAgPT4gICfQtNC10LLRj9C90L7RgdGC0L4nLCAgICAgOTAwID0+ICAn0LTQtdCy0Y/RgtGM0YHQvtGCJywKICAgICAgICA5ICAgPT4gICfQtNC10LLRj9GC0YwnLCAgICAgICAxOSAgPT4gICfQtNC10LLRj9GC0L3QsNC00YbQsNGC0YwnICAgIAogICAgKTsKICAgIAogICAgJGZlbWFsZVNwZWxsaW5nID0gYXJyYXkoCiAgICAgICAgMSAgID0+ICAn0L7QtNC90LAnLCAgICAgICAgMiAgID0+ICAn0LTQstC1JwogICAgKTsKCiAgICBpZiAoJGlzRmVtYWxlKSB7CiAgICAgICAgJHNwZWxsaW5nWzFdID0gJGZlbWFsZVNwZWxsaW5nWzFdOwogICAgICAgICRzcGVsbGluZ1syXSA9ICRmZW1hbGVTcGVsbGluZ1syXTsKICAgIH0KCiAgICBpZiAoJG51bWJlciA8IDIwKSB7CiAgICAgICAgcmV0dXJuICRzcGVsbGluZ1skbnVtYmVyXTsKICAgIH0gZWxzZWlmICgkbnVtYmVyIDwgMTAwICYmICRudW1iZXIgJSAxMCAhPSAwKSB7CiAgICAgICAgJHVuaXRzID0gJG51bWJlciAlIDEwOwogICAgICAgICRkb3plbnMgPSAkbnVtYmVyIC0gJHVuaXRzOwogICAgICAgIHJldHVybiAkc3BlbGxpbmdbJGRvemVuc10uIiAiLiRzcGVsbGluZ1skdW5pdHNdOwogICAgfSBlbHNlaWYgKCRudW1iZXIgPCAxMDAgJiYgJG51bWJlciAlIDEwID09IDApIHJldHVybiAkc3BlbGxpbmdbJG51bWJlcl07CgogICAgJGh1bmRyZWRzID0gJG51bWJlciAtICRudW1iZXIgJSAxMDA7CiAgICAKICAgIGlmICgkbnVtYmVyICUgMTAwIDwgMjAgJiYgJG51bWJlciAlIDEwMCAhPSAwKSB7CiAgICAgICAgJGRvemVucyA9ICRudW1iZXIgJSAxMDA7CiAgICAgICAgcmV0dXJuICRzcGVsbGluZ1skaHVuZHJlZHNdLiIgIi4kc3BlbGxpbmdbJGRvemVuc107CiAgICB9IGVsc2VpZiAoJG51bWJlciAlIDEwMCA9PSAwKSB7CiAgICAgICAgcmV0dXJuICRzcGVsbGluZ1skaHVuZHJlZHNdOwogICAgfSBlbHNlaWYgKCRudW1iZXIgJSAxMCA9PSAwKSB7CiAgICAgICAgJGRvemVucyA9ICRudW1iZXIgJSAxMDA7CiAgICAgICAgJGh1bmRyZWRzID0gJG51bWJlciAtICRkb3plbnM7CiAgICAgICAgcmV0dXJuICRzcGVsbGluZ1skaHVuZHJlZHNdLiIgIi4kc3BlbGxpbmdbJGRvemVuc107CiAgICB9CgogICAgJGRvemVucyA9ICRudW1iZXIgJSAxMDAgLSAkbnVtYmVyICUgMTA7CiAgICAkdW5pdHMgPSAkbnVtYmVyICUgMTA7CgogICAgcmV0dXJuICRzcGVsbGluZ1skaHVuZHJlZHNdLiIgIi4kc3BlbGxpbmdbJGRvemVuc10uIiAiLiRzcGVsbGluZ1skdW5pdHNdOwp9CgoKZnVuY3Rpb24gbnVtYmVyVG9UZXh0KCRudW1iZXIpIHsKCiAgICBpZiAoJG51bWJlciA8IDEwMDApIHsKICAgICAgICByZXR1cm4gc21hbGxOdW1iZXJUb1RleHQoJG51bWJlciwgMCkuIiAiLmluY2xpbmVXb3JkKCRudW1iZXIsICLRgNGD0LHQu9GMIiwgItGA0YPQsdC70Y8iLCAi0YDRg9Cx0LvQtdC5Iik7CiAgICB9IGVsc2VpZiAoJG51bWJlciA8IDEwMDAwMDApIHsKICAgICAgICAkdGhvdXNhbmRzID0gKCRudW1iZXIgLSAkbnVtYmVyICUgMTAwMCkgLyAxMDAwOwogICAgICAgICRodW5kcmVkcyA9ICRudW1iZXIgJSAxMDAwOwoKICAgICAgICBpZiAoJGh1bmRyZWRzID09IDApIHsKICAgICAgICAgICAgcmV0dXJuIHNtYWxsTnVtYmVyVG9UZXh0KCR0aG91c2FuZHMsIDEpLiIgIi5pbmNsaW5lV29yZCgkdGhvdXNhbmRzLCAi0YLRi9GB0Y/Rh9CwIiwgItGC0YvRgdGP0YfQuCIsICLRgtGL0YHRj9GHIikuIiAiLmluY2xpbmVXb3JkKCRudW1iZXIsICLRgNGD0LHQu9GMIiwgItGA0YPQsdC70Y8iLCAi0YDRg9Cx0LvQtdC5Iik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc21hbGxOdW1iZXJUb1RleHQoJHRob3VzYW5kcywgMSkuIiAiLmluY2xpbmVXb3JkKCR0aG91c2FuZHMsICLRgtGL0YHRj9GH0LAiLCAi0YLRi9GB0Y/Rh9C4IiwgItGC0YvRgdGP0YciKS4iICIuc21hbGxOdW1iZXJUb1RleHQoJGh1bmRyZWRzLCAwKS4iICIuaW5jbGluZVdvcmQoJG51bWJlciwgItGA0YPQsdC70YwiLCAi0YDRg9Cx0LvRjyIsICLRgNGD0LHQu9C10LkiKTsKICAgIH0gZWxzZWlmICgkbnVtYmVyIDwgMTAwMDAwMDAwMCkgewogICAgICAgICRtaWxsaW9ucyA9IGZsb29yKCRudW1iZXIgLyAxMDAwMDAwKTsKICAgICAgICAkdGhvdXNhbmRzID0gZmxvb3IoKCRudW1iZXIgJSAxMDAwMDAwKSAvIDEwMDApOwogICAgICAgICRodW5kcmVkcyA9ICRudW1iZXIgJSAxMDAwOwoKICAgICAgICBpZiAoJHRob3VzYW5kcyA9PSAwICYmICRodW5kcmVkcyA9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBzbWFsbE51bWJlclRvVGV4dCgkbWlsbGlvbnMsIDApLiIgIi5pbmNsaW5lV29yZCgkbWlsbGlvbnMsICLQvNC40LvQu9C40L7QvSIsICLQvNC40LvQu9C40L7QvdCwIiwgItC80LjQu9C70LjQvtC90L7QsiIpLiIgIi5pbmNsaW5lV29yZCgkbnVtYmVyLCAi0YDRg9Cx0LvRjCIsICLRgNGD0LHQu9GPIiwgItGA0YPQsdC70LXQuSIpOyAKICAgICAgICB9IGVsc2VpZiAoJHRob3VzYW5kcyA9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiBzbWFsbE51bWJlclRvVGV4dCgkbWlsbGlvbnMsIDApLiIgIi5pbmNsaW5lV29yZCgkbWlsbGlvbnMsICLQvNC40LvQu9C40L7QvSIsICLQvNC40LvQu9C40L7QvdCwIiwgItC80LjQu9C70LjQvtC90L7QsiIpLiIgIi5zbWFsbE51bWJlclRvVGV4dCgkaHVuZHJlZHMsIDApLiIgIi5pbmNsaW5lV29yZCgkbnVtYmVyLCAi0YDRg9Cx0LvRjCIsICLRgNGD0LHQu9GPIiwgItGA0YPQsdC70LXQuSIpOwogICAgICAgIH0gZWxzZWlmICgkaHVuZHJlZHMgPT0gMCkgewogICAgICAgICAgICByZXR1cm4gc21hbGxOdW1iZXJUb1RleHQoJG1pbGxpb25zLCAwKS4iICIuaW5jbGluZVdvcmQoJG1pbGxpb25zLCAi0LzQuNC70LvQuNC+0L0iLCAi0LzQuNC70LvQuNC+0L3QsCIsICLQvNC40LvQu9C40L7QvdC+0LIiKS4iICIuc21hbGxOdW1iZXJUb1RleHQoJHRob3VzYW5kcywgMSkuIiAiLmluY2xpbmVXb3JkKCR0aG91c2FuZHMsICLRgtGL0YHRj9GH0LAiLCAi0YLRi9GB0Y/Rh9C4IiwgItGC0YvRgdGP0YciKS4iICIuaW5jbGluZVdvcmQoJG51bWJlciwgItGA0YPQsdC70YwiLCAi0YDRg9Cx0LvRjyIsICLRgNGD0LHQu9C10LkiKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzbWFsbE51bWJlclRvVGV4dCgkbWlsbGlvbnMsIDApLiIgIi5pbmNsaW5lV29yZCgkbWlsbGlvbnMsICLQvNC40LvQu9C40L7QvSIsICLQvNC40LvQu9C40L7QvdCwIiwgItC80LjQu9C70LjQvtC90L7QsiIpLiIgIi5zbWFsbE51bWJlclRvVGV4dCgkdGhvdXNhbmRzLCAxKS4iICIuaW5jbGluZVdvcmQoJHRob3VzYW5kcywgItGC0YvRgdGP0YfQsCIsICLRgtGL0YHRj9GH0LgiLCAi0YLRi9GB0Y/RhyIpLiIgIi5zbWFsbE51bWJlclRvVGV4dCgkaHVuZHJlZHMsIDApLiIgIi5pbmNsaW5lV29yZCgkbnVtYmVyLCAi0YDRg9Cx0LvRjCIsICLRgNGD0LHQu9GPIiwgItGA0YPQsdC70LXQuSIpOwogICAgfQp9CgovKiDQktGL0LfQvtCy0LXQvCDRhNGD0L3QutGG0LjRjiDQvdC10YHQutC+0LvRjNC60L4g0YDQsNC3ICovCiRhbW91bnQxID0gbXRfcmFuZCgxLDk5OTk5OTk5KTsKJHRleHQxID0gbnVtYmVyVG9UZXh0KCRhbW91bnQxKTsKCmVjaG8gItCd0LAg0LLQsNGI0LXQvCDRgdGH0LXRgtGDIHskdGV4dDF9XG4iOwoKJGFtb3VudDIgPSBtdF9yYW5kKDEsOTk5OTk5OTkpOwokdGV4dDIgPSBudW1iZXJUb1RleHQoJGFtb3VudDIpOwoKZWNobyAi0J3QsCDQstCw0YjQtdC8INGB0YfQtdGC0YMgeyR0ZXh0Mn1cbiI7CgokYW1vdW50MyA9IDExMDEyMDEzOwokdGV4dDMgPSBudW1iZXJUb1RleHQoJGFtb3VudDMpOwoKZWNobyAi0J3QsCDQstCw0YjQtdC8INGB0YfQtdGC0YMgeyR0ZXh0M31cbiI7CgokYW1vdW50NCA9IDEwMDAwMDE7CiR0ZXh0NCA9IG51bWJlclRvVGV4dCgkYW1vdW50NCk7CgplY2hvICLQndCwINCy0LDRiNC10Lwg0YHRh9C10YLRgyB7JHRleHQ0fVxuIjsKCiRhbW91bnQ3ID0gMTAwMDAwOwokdGV4dDcgPSBudW1iZXJUb1RleHQoJGFtb3VudDcpOwoKZWNobyAi0J3QsCDQstCw0YjQtdC8INGB0YfQtdGC0YMgeyR0ZXh0N31cbiI7Cgo=