<?php
// Staring straight up into the sky ... oh my my
/* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
function inclineWord( $number , $word1 , $word2 , $word5 ) {
$lastDigits = $number % 100 ;
if ( ( $lastDigits - $lastDigits % 10 ) / 10 == 1 ) return $word5 ;
if ( $lastDigits % 10 == 1 ) return $word1 ;
if ( $lastDigits % 10 >= 2 && $lastDigits % 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 => 'две'
) ;
$text ;
if ( $number - ( $number % 100 ) != 0 ) $text .= $spelling [ $number - ( $number % 100 ) ] . " " ;
if ( ( $number % 100 <= 20 && $number % 100 >= 3 ) || ( $isFemale == 0 && $number % 100 <= 20 && $number % 100 != 0 ) ) $text .= $spelling [ $number % 100 ] . " " ;
else if ( $number % 100 <= 20 && $number % 100 != 0 ) $text .= $femaleSpelling [ $number % 100 ] . " " ;
else {
if ( ( $number % 100 ) - ( $number % 10 ) != 0 ) $text .= $spelling [ ( $number % 100 ) - ( $number % 10 ) ] . " " ;
if ( $number % 10 != 0 && $isFemale && ( $number % 10 == 1 || $number % 10 == 2 ) ) $text .= $femaleSpelling [ $number % 10 ] . " " ;
else if ( $number % 10 != 0 ) $text .= $spelling [ $number % 10 ] . " " ;
}
return $text ;
}
function numberToText( $number ) {
$text ;
if ( $number >= 1000000 ) $text .= smallNumberToText( ( $number - $number % 1000000 ) / 1000000 , 0 ) . inclineWord( ( $number - $number % 1000000 ) / 1000000 , "миллион" , "миллиона" , "миллионов" ) . " " ;
if ( $number >= 1000 ) $text .= smallNumberToText( ( $number % 1000000 - $number % 1000 ) / 1000 , 1 ) . inclineWord( ( $number % 1000000 - $number % 1000 ) / 1000 , "тысяча" , "тысячи" , "тысяч" ) . " " ;
if ( $number % 1000 != 0 ) $text .= smallNumberToText( $number % 1000 , 0 ) . inclineWord( $number % 1000 , "рубль" , "рубля" , "рублей" ) . " " ;
else $text .= "рублей" ;
return $text ;
}
/* Вызовем функцию несколько раз */
$amount1 = 1000000 ;
$text1 = numberToText( $amount1 ) ;
echo "На вашем счету {$text1} \n " ;
$amount2 = 92002000 ;
$text2 = numberToText( $amount2 ) ;
echo "На вашем счету {$text2} \n " ;
$amount3 = 0 ;
$text3 = numberToText( $amount3 ) ;
echo "На вашем счету {$text3} \n " ;
$amount4 = 100000001 ;
$text4 = numberToText( $amount4 ) ;
echo "На вашем счету {$text4} \n " ;
PD9waHAKIAovLyBTdGFyaW5nIHN0cmFpZ2h0IHVwIGludG8gdGhlIHNreSAuLi4gb2ggbXkgbXkKZXJyb3JfcmVwb3J0aW5nKC0xKTsKbWJfaW50ZXJuYWxfZW5jb2RpbmcoJ3V0Zi04Jyk7CiAKIAovKiDQktC+0LfQstGA0LDRidCw0LXRgiDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidGD0Y4g0YfQuNGB0LvRgyDRhNC+0YDQvNGDINGB0LvQvtCy0LA6IDEg0YDRg9Cx0LvRjCwgMiDRgNGD0LHQu9GPLCA1INGA0YPQsdC70LXQuSAqLwpmdW5jdGlvbiBpbmNsaW5lV29yZCgkbnVtYmVyLCAkd29yZDEsICR3b3JkMiwgJHdvcmQ1KSB7CiAgICAkbGFzdERpZ2l0cyA9ICRudW1iZXIgJSAxMDA7CiAgICBpZigoJGxhc3REaWdpdHMgLSAkbGFzdERpZ2l0cyUxMCkvMTAgPT0gMSkgcmV0dXJuICR3b3JkNTsKICAgIGlmKCRsYXN0RGlnaXRzJTEwID09IDEpIHJldHVybiAkd29yZDE7CiAgICBpZigkbGFzdERpZ2l0cyUxMCA+PSAyICYmICRsYXN0RGlnaXRzJTEwIDw9IDQpIHJldHVybiAkd29yZDI7CiAgICByZXR1cm4gJHdvcmQ1Owp9CiAKLyogCiAgICDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINGH0LjRgdC70LAg0L7RgiAwINC00L4gOTk5INCyINGC0LXQutGB0YIuINCf0LDRgNCw0LzQtdGC0YAgJGlzRmVtYWxlINGA0LDQstC10L0g0L3Rg9C70Y4sIAogICAg0LXRgdC70Lgg0LzRiyDRgdGH0LjRgtCw0LXQvCDRh9C40YHQu9C+INC00LvRjyDQvNGD0LbRgdC60L7Qs9C+INGA0L7QtNCwICjQvtC00LjQvSDRgNGD0LHQu9GMKSwgCiAgICDQuCAxIOKAlCDQtNC70Y8g0LbQtdC90YHQutC+0LPQviAo0L7QtNC90LAg0YLRi9GB0Y/Rh9CwKSAKKi8KZnVuY3Rpb24gc21hbGxOdW1iZXJUb1RleHQoJG51bWJlciwgJGlzRmVtYWxlKSB7CiAKICAgICRzcGVsbGluZyA9IGFycmF5KAogICAgICAgIDAgICA9PiAgJ9C90L7Qu9GMJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgID0+ICAn0LTQtdGB0Y/RgtGMJywgICAgICAgMTAwID0+ICAn0YHRgtC+JywKICAgICAgICAxICAgPT4gICfQvtC00LjQvScsICAgICAgICAgMTEgID0+ICAn0L7QtNC40L3QvdCw0LTRhtCw0YLRjCcsICAgICAgMjAgID0+ICAn0LTQstCw0LTRhtCw0YLRjCcsICAgICAyMDAgPT4gICfQtNCy0LXRgdGC0LgnLAogICAgICAgIDIgICA9PiAgJ9C00LLQsCcsICAgICAgICAgIDEyICA9PiAgJ9C00LLQtdC90LDQtNGG0LDRgtGMJywgICAgICAgMzAgID0+ICAn0YLRgNC40LTRhtCw0YLRjCcsICAgICAzMDAgPT4gICfRgtGA0LjRgdGC0LAnLAogICAgICAgIDMgICA9PiAgJ9GC0YDQuCcsICAgICAgICAgIDEzICA9PiAgJ9GC0YDQuNC90LDQtNGG0LDRgtGMJywgICAgICAgNDAgID0+ICAn0YHQvtGA0L7QuicsICAgICAgICA0MDAgPT4gICfRh9C10YLRi9GA0LXRgdGC0LAnLAogICAgICAgIDQgICA9PiAgJ9GH0LXRgtGL0YDQtScsICAgICAgIDE0ICA9PiAgJ9GH0LXRgtGL0YDQvdCw0LTRhtCw0YLRjCcsICAgICA1MCAgPT4gICfQv9GP0YLRjNC00LXRgdGP0YInLCAgICA1MDAgPT4gICfQv9GP0YLRjNGB0L7RgicsCiAgICAgICAgNSAgID0+ICAn0L/Rj9GC0YwnLCAgICAgICAgIDE1ICA9PiAgJ9C/0Y/RgtC90LDQtNGG0LDRgtGMJywgICAgICAgNjAgID0+ICAn0YjQtdGB0YLRjNC00LXRgdGP0YInLCAgIDYwMCA9PiAgJ9GI0LXRgdGC0YzRgdC+0YInLAogICAgICAgIDYgICA9PiAgJ9GI0LXRgdGC0YwnLCAgICAgICAgMTYgID0+ICAn0YjQtdGB0YLQvdCw0LTRhtCw0YLRjCcsICAgICAgNzAgID0+ICAn0YHQtdC80YzQtNC10YHRj9GCJywgICAgNzAwID0+ICAn0YHQtdC80YzRgdC+0YInLCAgICAKICAgICAgICA3ICAgPT4gICfRgdC10LzRjCcsICAgICAgICAgMTcgID0+ICAn0YHQtdC80L3QsNC00YbQsNGC0YwnLCAgICAgICA4MCAgPT4gICfQstC+0YHQtdC80YzQtNC10YHRj9GCJywgICA4MDAgPT4gICfQstC+0YHQtdC80YzRgdC+0YInLAogICAgICAgIDggICA9PiAgJ9Cy0L7RgdC10LzRjCcsICAgICAgIDE4ICA9PiAgJ9Cy0L7RgdC10LzQvdCw0LTRhtCw0YLRjCcsICAgICA5MCAgPT4gICfQtNC10LLRj9C90L7RgdGC0L4nLCAgICAgOTAwID0+ICAn0LTQtdCy0Y/RgtGM0YHQvtGCJywKICAgICAgICA5ICAgPT4gICfQtNC10LLRj9GC0YwnLCAgICAgICAxOSAgPT4gICfQtNC10LLRj9GC0L3QsNC00YbQsNGC0YwnICAgIAogICAgKTsKIAogICAgJGZlbWFsZVNwZWxsaW5nID0gYXJyYXkoCiAgICAgICAgMSAgID0+ICAn0L7QtNC90LAnLCAgICAgICAgMiAgID0+ICAn0LTQstC1JwogICAgKTsKCSR0ZXh0OwoJCiAgICBpZigkbnVtYmVyLSgkbnVtYmVyJTEwMCkgIT0gMCkgJHRleHQgLj0gJHNwZWxsaW5nWyRudW1iZXItKCRudW1iZXIlMTAwKV0gLiAiICI7CiAgICBpZigoJG51bWJlciUxMDAgPD0yMCAmJiAkbnVtYmVyJTEwMCA+PTMpIHx8ICgkaXNGZW1hbGUgPT0gMCAmJiAkbnVtYmVyJTEwMCA8PSAyMCAmJiAkbnVtYmVyJTEwMCAhPSAwKSkgJHRleHQgLj0gJHNwZWxsaW5nWyRudW1iZXIlMTAwXSAuICIgIjsKICAgIGVsc2UgaWYoJG51bWJlciUxMDAgPD0gMjAgJiYgJG51bWJlciUxMDAgIT0gMCkgJHRleHQgLj0gJGZlbWFsZVNwZWxsaW5nWyRudW1iZXIlMTAwXSAuICIgIjsKICAgIGVsc2UgewogICAgCWlmKCgkbnVtYmVyJTEwMCktKCRudW1iZXIlMTApICE9IDApCSR0ZXh0IC49ICRzcGVsbGluZ1soJG51bWJlciUxMDApLSgkbnVtYmVyJTEwKV0gLiAiICI7CiAgICAJaWYoJG51bWJlciUxMCAhPSAwICYmICRpc0ZlbWFsZSAmJiAoJG51bWJlciUxMCA9PSAxIHx8ICRudW1iZXIlMTAgPT0gMikpCSR0ZXh0IC49ICRmZW1hbGVTcGVsbGluZ1skbnVtYmVyJTEwXSAuICIgIjsKICAgIAllbHNlIGlmKCRudW1iZXIlMTAgIT0gMCkgJHRleHQgLj0gJHNwZWxsaW5nWyRudW1iZXIlMTBdIC4gIiAiOwogICAgfSAKICAgIHJldHVybiAkdGV4dDsKfQoKZnVuY3Rpb24gbnVtYmVyVG9UZXh0KCRudW1iZXIpIHsKCSR0ZXh0OwoJaWYoJG51bWJlciA+PSAxMDAwMDAwKSAJJHRleHQgLj0gc21hbGxOdW1iZXJUb1RleHQoKCRudW1iZXIgLSAkbnVtYmVyJTEwMDAwMDApLzEwMDAwMDAsIDApIC4gaW5jbGluZVdvcmQoKCRudW1iZXIgLSAkbnVtYmVyJTEwMDAwMDApLzEwMDAwMDAsICLQvNC40LvQu9C40L7QvSIsICLQvNC40LvQu9C40L7QvdCwIiwgItC80LjQu9C70LjQvtC90L7QsiIpIC4gIiAiOwoJaWYoJG51bWJlciA+PSAxMDAwKSAJJHRleHQgLj0gc21hbGxOdW1iZXJUb1RleHQoKCRudW1iZXIlMTAwMDAwMCAtICRudW1iZXIlMTAwMCkvMTAwMCwgMSkgLiBpbmNsaW5lV29yZCgoICRudW1iZXIlMTAwMDAwMCAtICRudW1iZXIlMTAwMCkvMTAwMCwgItGC0YvRgdGP0YfQsCIsICLRgtGL0YHRj9GH0LgiLCAi0YLRi9GB0Y/RhyIpIC4gIiAiOwoJaWYoJG51bWJlciAlIDEwMDAgIT0gMCkgJHRleHQgLj0gc21hbGxOdW1iZXJUb1RleHQoJG51bWJlciUxMDAwLCAwKSAuIGluY2xpbmVXb3JkKCRudW1iZXIlMTAwMCwgItGA0YPQsdC70YwiLCAi0YDRg9Cx0LvRjyIsICLRgNGD0LHQu9C10LkiKSAuICIgIjsKCWVsc2UgJHRleHQgLj0gItGA0YPQsdC70LXQuSI7CglyZXR1cm4gJHRleHQ7Cn0KCi8qINCS0YvQt9C+0LLQtdC8INGE0YPQvdC60YbQuNGOINC90LXRgdC60L7Qu9GM0LrQviDRgNCw0LcgKi8KJGFtb3VudDEgPSAxMDAwMDAwOwokdGV4dDEgPSBudW1iZXJUb1RleHQoJGFtb3VudDEpOwogCmVjaG8gItCd0LAg0LLQsNGI0LXQvCDRgdGH0LXRgtGDIHskdGV4dDF9XG4iOwogCiRhbW91bnQyID0gOTIwMDIwMDA7CiR0ZXh0MiA9IG51bWJlclRvVGV4dCgkYW1vdW50Mik7CiAKZWNobyAi0J3QsCDQstCw0YjQtdC8INGB0YfQtdGC0YMgeyR0ZXh0Mn1cbiI7CiAKJGFtb3VudDMgPSAwOwokdGV4dDMgPSBudW1iZXJUb1RleHQoJGFtb3VudDMpOwogCmVjaG8gItCd0LAg0LLQsNGI0LXQvCDRgdGH0LXRgtGDIHskdGV4dDN9XG4iOwogCiRhbW91bnQ0ID0gMTAwMDAwMDAxOwokdGV4dDQgPSBudW1iZXJUb1RleHQoJGFtb3VudDQpOwogCmVjaG8gItCd0LAg0LLQsNGI0LXQvCDRgdGH0LXRgtGDIHskdGV4dDR9XG4iOw==