<?php
// Staring straight up into the sky ... oh my my
/* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
function inclineWord( $number , $word1 , $word2 , $word5 )
{
$lastTwoDigits = $number % 100 ;
$lastDigit = $lastTwoDigits % 10 ;
if ( ( $word1 != "рубль" ) && $number == 0 ) {
return "" ;
}
if ( $lastTwoDigits >= 10 && $lastTwoDigits <= 20 ) {
return $word5 ;
} elseif ( $lastDigit == 1 ) {
return $word1 ;
} elseif ( $lastDigit > 1 && $lastDigit < 5 ) {
return $word2 ;
} else {
return $word5 ;
}
}
/*
Преобразует числа от 0 до 999 в текст. Параметр $isFemale равен нулю,
если мы считаем число для мужского рода (один рубль),
и 1 — для женского (одна тысяча)
*/
function smallNumberToText( $number , $isFemale = 0 , $isNotFirstRank = 0 )
{
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 => 'две'
) ;
0 => ''
) ;
if ( $isNotFirstRank ) {
$spelling = array_replace( $spelling , $notFirstRank ) ;
}
if ( $isFemale ) {
$spelling = array_replace( $spelling , $femaleSpelling ) ;
}
if ( $number <= 20 ) {
return $spelling [ $number ] ;
} elseif ( $number < 100 ) {
$decade = floor ( $number / 10 ) * 10 ; $year = $number % 10 ;
return ( $year ) ? $spelling [ $decade ] . " " . $spelling [ $year ] : $spelling [ $decade ] ;
} elseif ( $number < 1000 ) {
$century = floor ( $number / 100 ) * 100 ; $mod = $number % 100 ;
return ( $mod ) ? $spelling [ $century ] . " " . smallNumberToText( $mod , $isFemale ) : $spelling [ $century ] ;
}
}
function numberToText( $number )
{
$result = "" ;
if ( $length < 4 ) {
$words = 1 ;
} elseif ( $length > 3 && $length < 7 ) {
$words = 2 ;
} elseif ( $length > 6 && $length < 10 ) {
$words = 3 ;
} elseif ( $length > 9 && $length < 13 ) {
$words = 4 ;
}
"word1" => "рубль" ,
"word2" => "рубля" ,
"word5" => "рублей" ,
"isFemale" => 0
) ,
"word1" => "тысяча" ,
"word2" => "тысячи" ,
"word5" => "тысяч" ,
"isFemale" => 1
) ,
"word1" => "миллион" ,
"word2" => "миллиона" ,
"word5" => "миллионов" ,
"isFemale" => 0
) ,
"word1" => "миллиард" ,
"word2" => "миллиарда" ,
"word5" => "миллиардов" ,
"isFemale" => 0
)
) ;
$firstDigit = 0 ;
for ( $i = $words ; $i > 0 ; $i -- ) {
$qty = ( ( $firstDigit == 0 ) && ( $length % 3 != 0 ) ) ? $length % 3 : 3 ;
$result .= " " . smallNumberToText
( ( integer
) mb_substr ( $number , $firstDigit , $qty ) , $money [ $i ] [ "isFemale" ] , $firstDigit ) ; if ( $firstDigit == 0 ) {
$result = ltrim ( $result ) ; }
$result .= " " . inclineWord
( ( integer
) mb_substr ( $number , $firstDigit , $qty ) , $money [ $i ] [ "word1" ] , $money [ $i ] [ "word2" ] , $money [ $i ] [ "word5" ] ) ; $firstDigit += $qty ;
}
$reg = "/([\\ w])(\\ s+)([\\ w])/ui" ;
$right = "$1 $3 " ;
return $spacesFixed ;
}
/* Вызовем функцию несколько раз */
$number1 = 3001079 ;
$spelled = numberToText( $number1 ) ;
echo "На вашем счету $spelled . \n " ;
$number2 = 1000001 ;
$spelled2 = numberToText( $number2 ) ;
echo "На вашем счету $spelled2 . \n " ;
$number = 123456 ;
$text0 = numberToText( $number ) ;
echo "На вашем счету $text0 .\n " ;
$text1 = numberToText( $amount1 ) ;
echo "На вашем счету {$text1} .\n " ;
$text2 = numberToText( $amount2 ) ;
echo "На вашем счету {$text2} .\n " ;
$text3 = numberToText( $amount3 ) ;
echo "На вашем счету {$text3} .\n " ;
$text4 = numberToText( $amount4 ) ;
echo "На вашем счету {$text4} .\n " ;
ICAgIDw/cGhwCgovLyBTdGFyaW5nIHN0cmFpZ2h0IHVwIGludG8gdGhlIHNreSAuLi4gb2ggbXkgbXkKZXJyb3JfcmVwb3J0aW5nKC0xKTsKbWJfaW50ZXJuYWxfZW5jb2RpbmcoJ3V0Zi04Jyk7CgoKLyog0JLQvtC30LLRgNCw0YnQsNC10YIg0YHQvtC+0YLQstC10YLRgdGC0LLRg9GO0YnRg9GOINGH0LjRgdC70YMg0YTQvtGA0LzRgyDRgdC70L7QstCwOiAxINGA0YPQsdC70YwsIDIg0YDRg9Cx0LvRjywgNSDRgNGD0LHQu9C10LkgKi8KZnVuY3Rpb24gaW5jbGluZVdvcmQoJG51bWJlciwgJHdvcmQxLCAkd29yZDIsICR3b3JkNSkKewogICAgCiAgICAkbGFzdFR3b0RpZ2l0cyA9ICRudW1iZXIgJSAxMDA7CiAgICAkbGFzdERpZ2l0ICAgICA9ICRsYXN0VHdvRGlnaXRzICUgMTA7CiAgICAKICAgIGlmICgoJHdvcmQxICE9ICLRgNGD0LHQu9GMIikgJiYgJG51bWJlciA9PSAwKSB7CiAgICAgICAgcmV0dXJuICIiOwogICAgfQogICAgaWYgKCRsYXN0VHdvRGlnaXRzID49IDEwICYmICRsYXN0VHdvRGlnaXRzIDw9IDIwKSB7CiAgICAgICAgcmV0dXJuICR3b3JkNTsKICAgIH0gZWxzZWlmICgkbGFzdERpZ2l0ID09IDEpIHsKICAgICAgICByZXR1cm4gJHdvcmQxOwogICAgfSBlbHNlaWYgKCRsYXN0RGlnaXQgPiAxICYmICRsYXN0RGlnaXQgPCA1KSB7CiAgICAgICAgcmV0dXJuICR3b3JkMjsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuICR3b3JkNTsKICAgIH0KfQoKLyoK0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDRh9C40YHQu9CwINC+0YIgMCDQtNC+IDk5OSDQsiDRgtC10LrRgdGCLiDQn9Cw0YDQsNC80LXRgtGAICRpc0ZlbWFsZSDRgNCw0LLQtdC9INC90YPQu9GOLArQtdGB0LvQuCDQvNGLINGB0YfQuNGC0LDQtdC8INGH0LjRgdC70L4g0LTQu9GPINC80YPQttGB0LrQvtCz0L4g0YDQvtC00LAgKNC+0LTQuNC9INGA0YPQsdC70YwpLArQuCAxIOKAlCDQtNC70Y8g0LbQtdC90YHQutC+0LPQviAo0L7QtNC90LAg0YLRi9GB0Y/Rh9CwKQoqLwpmdW5jdGlvbiBzbWFsbE51bWJlclRvVGV4dCgkbnVtYmVyLCAkaXNGZW1hbGUgPSAwLCAkaXNOb3RGaXJzdFJhbmsgPSAwKQp7CiAgICAKICAgICRzcGVsbGluZyA9IGFycmF5KAogICAgICAgIDAgPT4gJ9C90L7Qu9GMJywKICAgICAgICAxMCA9PiAn0LTQtdGB0Y/RgtGMJywKICAgICAgICAxMDAgPT4gJ9GB0YLQvicsCiAgICAgICAgMSA9PiAn0L7QtNC40L0nLAogICAgICAgIDExID0+ICfQvtC00LjQvdC90LDQtNGG0LDRgtGMJywKICAgICAgICAyMCA9PiAn0LTQstCw0LTRhtCw0YLRjCcsCiAgICAgICAgMjAwID0+ICfQtNCy0LXRgdGC0LgnLAogICAgICAgIDIgPT4gJ9C00LLQsCcsCiAgICAgICAgMTIgPT4gJ9C00LLQtdC90LDQtNGG0LDRgtGMJywKICAgICAgICAzMCA9PiAn0YLRgNC40LTRhtCw0YLRjCcsCiAgICAgICAgMzAwID0+ICfRgtGA0LjRgdGC0LAnLAogICAgICAgIDMgPT4gJ9GC0YDQuCcsCiAgICAgICAgMTMgPT4gJ9GC0YDQuNC90LDQtNGG0LDRgtGMJywKICAgICAgICA0MCA9PiAn0YHQvtGA0L7QuicsCiAgICAgICAgNDAwID0+ICfRh9C10YLRi9GA0LXRgdGC0LAnLAogICAgICAgIDQgPT4gJ9GH0LXRgtGL0YDQtScsCiAgICAgICAgMTQgPT4gJ9GH0LXRgtGL0YDQvdCw0LTRhtCw0YLRjCcsCiAgICAgICAgNTAgPT4gJ9C/0Y/RgtGM0LTQtdGB0Y/RgicsCiAgICAgICAgNTAwID0+ICfQv9GP0YLRjNGB0L7RgicsCiAgICAgICAgNSA9PiAn0L/Rj9GC0YwnLAogICAgICAgIDE1ID0+ICfQv9GP0YLQvdCw0LTRhtCw0YLRjCcsCiAgICAgICAgNjAgPT4gJ9GI0LXRgdGC0YzQtNC10YHRj9GCJywKICAgICAgICA2MDAgPT4gJ9GI0LXRgdGC0YzRgdC+0YInLAogICAgICAgIDYgPT4gJ9GI0LXRgdGC0YwnLAogICAgICAgIDE2ID0+ICfRiNC10YHRgtC90LDQtNGG0LDRgtGMJywKICAgICAgICA3MCA9PiAn0YHQtdC80YzQtNC10YHRj9GCJywKICAgICAgICA3MDAgPT4gJ9GB0LXQvNGM0YHQvtGCJywKICAgICAgICA3ID0+ICfRgdC10LzRjCcsCiAgICAgICAgMTcgPT4gJ9GB0LXQvNC90LDQtNGG0LDRgtGMJywKICAgICAgICA4MCA9PiAn0LLQvtGB0LXQvNGM0LTQtdGB0Y/RgicsCiAgICAgICAgODAwID0+ICfQstC+0YHQtdC80YzRgdC+0YInLAogICAgICAgIDggPT4gJ9Cy0L7RgdC10LzRjCcsCiAgICAgICAgMTggPT4gJ9Cy0L7RgdC10LzQvdCw0LTRhtCw0YLRjCcsCiAgICAgICAgOTAgPT4gJ9C00LXQstGP0L3QvtGB0YLQvicsCiAgICAgICAgOTAwID0+ICfQtNC10LLRj9GC0YzRgdC+0YInLAogICAgICAgIDkgPT4gJ9C00LXQstGP0YLRjCcsCiAgICAgICAgMTkgPT4gJ9C00LXQstGP0YLQvdCw0LTRhtCw0YLRjCcKICAgICk7CiAgICAKICAgICRmZW1hbGVTcGVsbGluZyA9IGFycmF5KAogICAgICAgIDEgPT4gJ9C+0LTQvdCwJywKICAgICAgICAyID0+ICfQtNCy0LUnCiAgICApOwogICAgCiAgICAkbm90Rmlyc3RSYW5rID0gYXJyYXkoCiAgICAgICAgMCA9PiAnJwogICAgKTsKICAgIAogICAgaWYgKCRpc05vdEZpcnN0UmFuaykgewogICAgICAgICRzcGVsbGluZyA9IGFycmF5X3JlcGxhY2UoJHNwZWxsaW5nLCAkbm90Rmlyc3RSYW5rKTsKICAgIH0KICAgIAogICAgaWYgKCRpc0ZlbWFsZSkgewogICAgICAgICRzcGVsbGluZyA9IGFycmF5X3JlcGxhY2UoJHNwZWxsaW5nLCAkZmVtYWxlU3BlbGxpbmcpOwogICAgfQogICAgCiAgICBpZiAoJG51bWJlciA8PSAyMCkgewogICAgICAgIHJldHVybiAkc3BlbGxpbmdbJG51bWJlcl07CiAgICB9IGVsc2VpZiAoJG51bWJlciA8IDEwMCkgewogICAgICAgICRkZWNhZGUgPSBmbG9vcigkbnVtYmVyIC8gMTApICogMTA7CiAgICAgICAgJHllYXIgICA9ICRudW1iZXIgJSAxMDsKICAgICAgICByZXR1cm4gKCR5ZWFyKSA/ICRzcGVsbGluZ1skZGVjYWRlXSAuICIgIiAuICRzcGVsbGluZ1skeWVhcl0gOiAkc3BlbGxpbmdbJGRlY2FkZV07CiAgICB9IGVsc2VpZiAoJG51bWJlciA8IDEwMDApIHsKICAgICAgICAkY2VudHVyeSA9IGZsb29yKCRudW1iZXIgLyAxMDApICogMTAwOwogICAgICAgICRtb2QgICAgID0gJG51bWJlciAlIDEwMDsKICAgICAgICAKICAgICAgICByZXR1cm4gKCRtb2QpID8gJHNwZWxsaW5nWyRjZW50dXJ5XSAuICIgIiAuIHNtYWxsTnVtYmVyVG9UZXh0KCRtb2QsICRpc0ZlbWFsZSkgOiAkc3BlbGxpbmdbJGNlbnR1cnldOwogICAgfQp9CgpmdW5jdGlvbiBudW1iZXJUb1RleHQoJG51bWJlcikKewogICAgJHJlc3VsdCA9ICIiOwogICAgCiAgICBzZXR0eXBlKCRudW1iZXIsICJzdHJpbmciKTsKICAgICRsZW5ndGggPSBtYl9zdHJsZW4oJG51bWJlcik7CiAgICAKICAgIGlmICgkbGVuZ3RoIDwgNCkgewogICAgICAgICR3b3JkcyA9IDE7CiAgICB9IGVsc2VpZiAoJGxlbmd0aCA+IDMgJiYgJGxlbmd0aCA8IDcpIHsKICAgICAgICAkd29yZHMgPSAyOwogICAgfSBlbHNlaWYgKCRsZW5ndGggPiA2ICYmICRsZW5ndGggPCAxMCkgewogICAgICAgICR3b3JkcyA9IDM7CiAgICB9IGVsc2VpZiAoJGxlbmd0aCA+IDkgJiYgJGxlbmd0aCA8IDEzKSB7CiAgICAgICAgJHdvcmRzID0gNDsKICAgIH0KICAgIAogICAgJG1vbmV5ID0gYXJyYXkoCiAgICAgICAgMSA9PiBhcnJheSgKICAgICAgICAgICAgIndvcmQxIiA9PiAi0YDRg9Cx0LvRjCIsCiAgICAgICAgICAgICJ3b3JkMiIgPT4gItGA0YPQsdC70Y8iLAogICAgICAgICAgICAid29yZDUiID0+ICLRgNGD0LHQu9C10LkiLAogICAgICAgICAgICAiaXNGZW1hbGUiID0+IDAKICAgICAgICApLAogICAgICAgIDIgPT4gYXJyYXkoCiAgICAgICAgICAgICJ3b3JkMSIgPT4gItGC0YvRgdGP0YfQsCIsCiAgICAgICAgICAgICJ3b3JkMiIgPT4gItGC0YvRgdGP0YfQuCIsCiAgICAgICAgICAgICJ3b3JkNSIgPT4gItGC0YvRgdGP0YciLAogICAgICAgICAgICAiaXNGZW1hbGUiID0+IDEKICAgICAgICApLAogICAgICAgIDMgPT4gYXJyYXkoCiAgICAgICAgICAgICJ3b3JkMSIgPT4gItC80LjQu9C70LjQvtC9IiwKICAgICAgICAgICAgIndvcmQyIiA9PiAi0LzQuNC70LvQuNC+0L3QsCIsCiAgICAgICAgICAgICJ3b3JkNSIgPT4gItC80LjQu9C70LjQvtC90L7QsiIsCiAgICAgICAgICAgICJpc0ZlbWFsZSIgPT4gMAogICAgICAgICksCiAgICAgICAgNCA9PiBhcnJheSgKICAgICAgICAgICAgIndvcmQxIiA9PiAi0LzQuNC70LvQuNCw0YDQtCIsCiAgICAgICAgICAgICJ3b3JkMiIgPT4gItC80LjQu9C70LjQsNGA0LTQsCIsCiAgICAgICAgICAgICJ3b3JkNSIgPT4gItC80LjQu9C70LjQsNGA0LTQvtCyIiwKICAgICAgICAgICAgImlzRmVtYWxlIiA9PiAwCiAgICAgICAgKQogICAgKTsKICAgIAogICAgJGZpcnN0RGlnaXQgPSAwOwogICAgCiAgICBmb3IgKCRpID0gJHdvcmRzOyAkaSA+IDA7ICRpLS0pIHsKICAgICAgICAkcXR5ID0gKCgkZmlyc3REaWdpdCA9PSAwKSAmJiAoJGxlbmd0aCAlIDMgIT0gMCkpID8gJGxlbmd0aCAlIDMgOiAzOwogICAgICAgICRyZXN1bHQgLj0gIiAiIC4gc21hbGxOdW1iZXJUb1RleHQoKGludGVnZXIpIG1iX3N1YnN0cigkbnVtYmVyLCAkZmlyc3REaWdpdCwgJHF0eSksICRtb25leVskaV1bImlzRmVtYWxlIl0sICRmaXJzdERpZ2l0KTsKICAgICAgICBpZiAoJGZpcnN0RGlnaXQgPT0gMCkgewogICAgICAgICAgICAkcmVzdWx0ID0gbHRyaW0oJHJlc3VsdCk7CiAgICAgICAgfQogICAgICAgICRyZXN1bHQgLj0gIiAiIC4gaW5jbGluZVdvcmQoKGludGVnZXIpIG1iX3N1YnN0cigkbnVtYmVyLCAkZmlyc3REaWdpdCwgJHF0eSksICRtb25leVskaV1bIndvcmQxIl0sICRtb25leVskaV1bIndvcmQyIl0sICRtb25leVskaV1bIndvcmQ1Il0pOwogICAgICAgICRmaXJzdERpZ2l0ICs9ICRxdHk7CiAgICB9CiAgICAkcmVnID0gIi8oW1xcd10pKFxccyspKFtcXHddKS91aSI7CgogICAgJHJpZ2h0ID0gIiQxICQzIjsKICAgIAogICAgJHNwYWNlc0ZpeGVkID0gcHJlZ19yZXBsYWNlKCRyZWcsICRyaWdodCwgJHJlc3VsdCk7CiAgICAKICAgIHJldHVybiAkc3BhY2VzRml4ZWQ7Cn0KCi8qINCS0YvQt9C+0LLQtdC8INGE0YPQvdC60YbQuNGOINC90LXRgdC60L7Qu9GM0LrQviDRgNCw0LcgKi8KCiRudW1iZXIxID0gMzAwMTA3OTsKJHNwZWxsZWQgPSBudW1iZXJUb1RleHQoJG51bWJlcjEpOwplY2hvICLQndCwINCy0LDRiNC10Lwg0YHRh9C10YLRgyAkc3BlbGxlZC4gXG4iOwoKJG51bWJlcjIgID0gMTAwMDAwMTsKJHNwZWxsZWQyID0gbnVtYmVyVG9UZXh0KCRudW1iZXIyKTsKZWNobyAi0J3QsCDQstCw0YjQtdC8INGB0YfQtdGC0YMgJHNwZWxsZWQyLiBcbiI7CgokbnVtYmVyID0gMTIzNDU2OwokdGV4dDAgID0gbnVtYmVyVG9UZXh0KCRudW1iZXIpOwplY2hvICLQndCwINCy0LDRiNC10Lwg0YHRh9C10YLRgyAkdGV4dDAuXG4iOwoKJGFtb3VudDEgPSBtdF9yYW5kKDEsIDk5OTk5OTk5OTkpOwokdGV4dDEgICA9IG51bWJlclRvVGV4dCgkYW1vdW50MSk7CgplY2hvICLQndCwINCy0LDRiNC10Lwg0YHRh9C10YLRgyB7JHRleHQxfS5cbiI7CgokYW1vdW50MiA9IG10X3JhbmQoMSwgOTk5OTk5OTk5OSk7CiR0ZXh0MiAgID0gbnVtYmVyVG9UZXh0KCRhbW91bnQyKTsKCmVjaG8gItCd0LAg0LLQsNGI0LXQvCDRgdGH0LXRgtGDIHskdGV4dDJ9LlxuIjsKCiRhbW91bnQzID0gbXRfcmFuZCgxLCA5OTk5OTk5OTk5KTsKJHRleHQzICAgPSBudW1iZXJUb1RleHQoJGFtb3VudDMpOwoKZWNobyAi0J3QsCDQstCw0YjQtdC8INGB0YfQtdGC0YMgeyR0ZXh0M30uXG4iOwoKJGFtb3VudDQgPSBtdF9yYW5kKDEsIDk5OTk5OTk5OTkpOwokdGV4dDQgICA9IG51bWJlclRvVGV4dCgkYW1vdW50NCk7CgplY2hvICLQndCwINCy0LDRiNC10Lwg0YHRh9C10YLRgyB7JHRleHQ0fS5cbiI7Cgo=