<?php
/**
* 05.05.2015 (20:17)
* TheNumbers.php
* PhpStorm
*/
header ( "Content-Type: text/plain; charset=utf-8" ) ;
/* Делает первую букву предложения заглавной */
function makeFirstLetterUppercase( $input )
{
$result = $firstLetter . $otherLetters ;
return $result ;
}
/* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
function inclineWord( $input , $word1 , $word2 , $word5 )
{
if ( ( $input >= 11 ) && ( $input <= 14 ) ) {
$result = $word5 ;
} else {
$lastSymbol = $input % 10 ;
if ( $lastSymbol == 1 ) {
$result = $word1 ;
} elseif ( ( $lastSymbol >= 2 ) && ( $lastSymbol <= 4 ) ) {
$result = $word2 ;
} else {
$result = $word5 ;
}
}
return $result ;
}
/**
* Преобразует числа от 0 до 999 в текст. Параметр $isFemale равен нулю,
* если мы считаем число для мужского рода (один рубль),
* и 1 — для женского (одна тысяча)
*/
function smallNumberToText( $input , $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 == 1 ) {
$spelling = array_replace( $spelling , $femaleSpelling ) ;
}
$singleDigits = $input % 10 ;
$tens = $input % 100 ;
$tensSave = $tens - $singleDigits ;
$hundreds = $input - $tens ;
if ( $input == 0 ) {
$text [ ] = $spelling [ $input ] ;
}
if ( $hundreds != 0 ) {
$text [ ] = $spelling [ $hundreds ] ;
}
if ( ( $tens >= 1 ) && ( $tens <= 19 ) ) {
$text [ ] = $spelling [ $tens ] ;
}
if ( ( $tens >= 20 ) && ( $tens <= 99 ) ) {
$text [ ] = $spelling [ $tensSave ] ;
if ( $singleDigits != 0 ) {
$text [ ] = $spelling [ $singleDigits ] ;
}
}
return $result ;
}
function numberToText( $input )
{
$million = floor ( $input / 1000000 ) ; $thousand = floor ( ( $input - ( $million * 1000000 ) ) / 1000 ) ; $hundreds = $input % 1000 ;
if ( $million != 0 ) {
$text [ ] = smallNumberToText( $million , 0 ) ;
$text [ ] = inclineWord( $million , 'миллион' , 'миллиона' , 'миллионов' ) ;
}
if ( $thousand != 0 ) {
$text [ ] = smallNumberToText( $thousand , 1 ) ;
$text [ ] = inclineWord( $thousand , 'тысяча' , 'тысячи' , 'тысяч' ) ;
}
if ( $hundreds != 0 ) {
$text [ ] = smallNumberToText( $hundreds , 0 ) ;
$text [ ] = inclineWord( $hundreds , 'рубль.' , 'рубля.' , 'рублей.' ) ;
}
$result = makeFirstLetterUppercase( $result ) ;
return $result ;
}
$text = numberToText( $amount ) ;
echo "На вашем счету: {$text} ({$amount} )\n " ;
$text = numberToText( $amount ) ;
echo "На вашем счету: {$text} ({$amount} )\n " ;
$text = numberToText( $amount ) ;
echo "На вашем счету: {$text} ({$amount} )\n " ;
$text = numberToText( $amount ) ;
echo "На вашем счету: {$text} ({$amount} )\n " ;
$amount = mt_rand ( 1000000 , 9999999 ) ; $text = numberToText( $amount ) ;
echo "На вашем счету: {$text} ({$amount} )\n " ;
$amount = mt_rand ( 10000000 , 99999999 ) ; $text = numberToText( $amount ) ;
echo "На вашем счету: {$text} ({$amount} )\n " ;
$amount = 11011011 ;
$text = numberToText( $amount ) ;
echo "На вашем счету: {$text} ({$amount} )\n " ;
$amount = 11012013 ;
$text = numberToText( $amount ) ;
echo "На вашем счету: {$text} ({$amount} )\n " ;
PD9waHAKCi8qKgogKiAwNS4wNS4yMDE1ICgyMDoxNykKICogVGhlTnVtYmVycy5waHAKICogUGhwU3Rvcm0KICovCgplcnJvcl9yZXBvcnRpbmcoLTEpOwptYl9pbnRlcm5hbF9lbmNvZGluZygndXRmLTgnKTsKaGVhZGVyKCJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiKTsKCi8qINCU0LXQu9Cw0LXRgiDQv9C10YDQstGD0Y4g0LHRg9C60LLRgyDQv9GA0LXQtNC70L7QttC10L3QuNGPINC30LDQs9C70LDQstC90L7QuSAqLwpmdW5jdGlvbiBtYWtlRmlyc3RMZXR0ZXJVcHBlcmNhc2UoJGlucHV0KQp7CiAgICAkZmlyc3RMZXR0ZXIgPSBtYl9zdWJzdHIoJGlucHV0LCAwLCAxKTsKICAgICRmaXJzdExldHRlciA9IG1iX3N0cnRvdXBwZXIoJGZpcnN0TGV0dGVyKTsKICAgICRvdGhlckxldHRlcnMgPSBtYl9zdWJzdHIoJGlucHV0LCAxKTsKICAgICRyZXN1bHQgPSAkZmlyc3RMZXR0ZXIgLiAkb3RoZXJMZXR0ZXJzOwogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCi8qINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGJ0YPRjiDRh9C40YHQu9GDINGE0L7RgNC80YMg0YHQu9C+0LLQsDogMSDRgNGD0LHQu9GMLCAyINGA0YPQsdC70Y8sIDUg0YDRg9Cx0LvQtdC5ICovCmZ1bmN0aW9uIGluY2xpbmVXb3JkKCRpbnB1dCwgJHdvcmQxLCAkd29yZDIsICR3b3JkNSkKewogICAgaWYgKCgkaW5wdXQgPj0gMTEpICYmICgkaW5wdXQgPD0gMTQpKSB7CiAgICAgICAgJHJlc3VsdCA9ICR3b3JkNTsKICAgIH0gZWxzZSB7CiAgICAgICAgJGxhc3RTeW1ib2wgPSAkaW5wdXQgJSAxMDsKICAgICAgICBpZiAoJGxhc3RTeW1ib2wgPT0gMSkgewogICAgICAgICAgICAkcmVzdWx0ID0gJHdvcmQxOwogICAgICAgIH0gZWxzZWlmICgoJGxhc3RTeW1ib2wgPj0gMikgJiYgKCRsYXN0U3ltYm9sIDw9IDQpKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSAkd29yZDI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHJlc3VsdCA9ICR3b3JkNTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKfQoKLyoqCiAqINCf0YDQtdC+0LHRgNCw0LfRg9C10YIg0YfQuNGB0LvQsCDQvtGCIDAg0LTQviA5OTkg0LIg0YLQtdC60YHRgi4g0J/QsNGA0LDQvNC10YLRgCAkaXNGZW1hbGUg0YDQsNCy0LXQvSDQvdGD0LvRjiwKICog0LXRgdC70Lgg0LzRiyDRgdGH0LjRgtCw0LXQvCDRh9C40YHQu9C+INC00LvRjyDQvNGD0LbRgdC60L7Qs9C+INGA0L7QtNCwICjQvtC00LjQvSDRgNGD0LHQu9GMKSwKICog0LggMSDigJQg0LTQu9GPINC20LXQvdGB0LrQvtCz0L4gKNC+0LTQvdCwINGC0YvRgdGP0YfQsCkKICovCmZ1bmN0aW9uIHNtYWxsTnVtYmVyVG9UZXh0KCRpbnB1dCwgJGlzRmVtYWxlKQp7CiAgICAkc3BlbGxpbmcgPSBhcnJheSgKICAgICAgICAwID0+ICfQvdC+0LvRjCcsICAgIDEwID0+ICfQtNC10YHRj9GC0YwnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMCA9PiAn0YHRgtC+JywKICAgICAgICAxID0+ICfQvtC00LjQvScsICAgIDExID0+ICfQvtC00LjQvdC90LDQtNGG0LDRgtGMJywgICAgMjAgPT4gJ9C00LLQsNC00YbQsNGC0YwnLCAgICAgICAyMDAgPT4gJ9C00LLQtdGB0YLQuCcsCiAgICAgICAgMiA9PiAn0LTQstCwJywgICAgIDEyID0+ICfQtNCy0LXQvdCw0LTRhtCw0YLRjCcsICAgICAzMCA9PiAn0YLRgNC40LTRhtCw0YLRjCcsICAgICAgIDMwMCA9PiAn0YLRgNC40YHRgtCwJywKICAgICAgICAzID0+ICfRgtGA0LgnLCAgICAgMTMgPT4gJ9GC0YDQuNC90LDQtNGG0LDRgtGMJywgICAgIDQwID0+ICfRgdC+0YDQvtC6JywgICAgICAgICAgNDAwID0+ICfRh9C10YLRi9GA0LXRgdGC0LAnLAogICAgICAgIDQgPT4gJ9GH0LXRgtGL0YDQtScsICAxNCA9PiAn0YfQtdGC0YvRgNC90LDQtNGG0LDRgtGMJywgICA1MCA9PiAn0L/Rj9GC0YzQtNC10YHRj9GCJywgICAgICA1MDAgPT4gJ9C/0Y/RgtGM0YHQvtGCJywKICAgICAgICA1ID0+ICfQv9GP0YLRjCcsICAgIDE1ID0+ICfQv9GP0YLQvdCw0LTRhtCw0YLRjCcsICAgICA2MCA9PiAn0YjQtdGB0YLRjNC00LXRgdGP0YInLCAgICAgNjAwID0+ICfRiNC10YHRgtGM0YHQvtGCJywKICAgICAgICA2ID0+ICfRiNC10YHRgtGMJywgICAxNiA9PiAn0YjQtdGB0YLQvdCw0LTRhtCw0YLRjCcsICAgIDcwID0+ICfRgdC10LzRjNC00LXRgdGP0YInLCAgICAgIDcwMCA9PiAn0YHQtdC80YzRgdC+0YInLAogICAgICAgIDcgPT4gJ9GB0LXQvNGMJywgICAgMTcgPT4gJ9GB0LXQvNC90LDQtNGG0LDRgtGMJywgICAgIDgwID0+ICfQstC+0YHQtdC80YzQtNC10YHRj9GCJywgICAgODAwID0+ICfQstC+0YHQtdC80YzRgdC+0YInLAogICAgICAgIDggPT4gJ9Cy0L7RgdC10LzRjCcsICAxOCA9PiAn0LLQvtGB0LXQvNC90LDQtNGG0LDRgtGMJywgICA5MCA9PiAn0LTQtdCy0Y/QvdC+0YHRgtC+JywgICAgICA5MDAgPT4gJ9C00LXQstGP0YLRjNGB0L7RgicsCiAgICAgICAgOSA9PiAn0LTQtdCy0Y/RgtGMJywgIDE5ID0+ICfQtNC10LLRj9GC0L3QsNC00YbQsNGC0YwnCiAgICApOwoKICAgICRmZW1hbGVTcGVsbGluZyA9IGFycmF5KAogICAgICAgIDEgPT4gJ9C+0LTQvdCwJywgMiA9PiAn0LTQstC1JywKICAgICk7CgogICAgJHRleHQgPSBhcnJheSgpOwoKICAgIGlmICgkaXNGZW1hbGUgPT0gMSkgewogICAgICAgICRzcGVsbGluZyA9IGFycmF5X3JlcGxhY2UoJHNwZWxsaW5nLCAkZmVtYWxlU3BlbGxpbmcpOwogICAgfQoKICAgICRzaW5nbGVEaWdpdHMgPSAkaW5wdXQgJSAxMDsKICAgICR0ZW5zID0gJGlucHV0ICUgMTAwOwogICAgJHRlbnNTYXZlID0gJHRlbnMgLSAkc2luZ2xlRGlnaXRzOwogICAgJGh1bmRyZWRzID0gJGlucHV0IC0gJHRlbnM7CgogICAgaWYgKCRpbnB1dCA9PSAwKSB7CiAgICAgICAgJHRleHRbXSA9ICRzcGVsbGluZ1skaW5wdXRdOwogICAgfQogICAgaWYgKCRodW5kcmVkcyAhPSAwKSB7CiAgICAgICAgJHRleHRbXSA9ICRzcGVsbGluZ1skaHVuZHJlZHNdOwogICAgfQogICAgaWYgKCgkdGVucyA+PSAxKSAmJiAoJHRlbnMgPD0gMTkpKSB7CiAgICAgICAgJHRleHRbXSA9ICRzcGVsbGluZ1skdGVuc107CiAgICB9CiAgICBpZiAoKCR0ZW5zID49IDIwKSAmJiAoJHRlbnMgPD0gOTkpKSB7CiAgICAgICAgJHRleHRbXSA9ICRzcGVsbGluZ1skdGVuc1NhdmVdOwogICAgICAgIGlmICgkc2luZ2xlRGlnaXRzICE9IDApIHsKICAgICAgICAgICAgJHRleHRbXSA9ICRzcGVsbGluZ1skc2luZ2xlRGlnaXRzXTsKICAgICAgICB9CiAgICB9CgogICAgJHJlc3VsdCA9IGltcGxvZGUoIiAiLCAkdGV4dCk7CgogICAgcmV0dXJuICRyZXN1bHQ7Cn0KCmZ1bmN0aW9uIG51bWJlclRvVGV4dCgkaW5wdXQpCnsKICAgICR0ZXh0ID0gYXJyYXkoKTsKCiAgICAkbWlsbGlvbiA9IGZsb29yKCRpbnB1dCAvIDEwMDAwMDApOwogICAgJHRob3VzYW5kID0gZmxvb3IoKCRpbnB1dCAtICgkbWlsbGlvbiAqIDEwMDAwMDApKSAvIDEwMDApOwogICAgJGh1bmRyZWRzID0gJGlucHV0ICUgMTAwMDsKCiAgICBpZiAoJG1pbGxpb24gIT0gMCkgewogICAgICAgICR0ZXh0W10gPSBzbWFsbE51bWJlclRvVGV4dCgkbWlsbGlvbiwgMCk7CiAgICAgICAgJHRleHRbXSA9IGluY2xpbmVXb3JkKCRtaWxsaW9uLCAn0LzQuNC70LvQuNC+0L0nLCAn0LzQuNC70LvQuNC+0L3QsCcsICfQvNC40LvQu9C40L7QvdC+0LInKTsKICAgIH0KICAgIGlmICgkdGhvdXNhbmQgIT0gMCkgewogICAgICAgICR0ZXh0W10gPSBzbWFsbE51bWJlclRvVGV4dCgkdGhvdXNhbmQsIDEpOwogICAgICAgICR0ZXh0W10gPSBpbmNsaW5lV29yZCgkdGhvdXNhbmQsICfRgtGL0YHRj9GH0LAnLCAn0YLRi9GB0Y/Rh9C4JywgJ9GC0YvRgdGP0YcnKTsKICAgIH0KICAgIGlmICgkaHVuZHJlZHMgIT0gMCkgewogICAgICAgICR0ZXh0W10gPSBzbWFsbE51bWJlclRvVGV4dCgkaHVuZHJlZHMsIDApOwogICAgICAgICR0ZXh0W10gPSBpbmNsaW5lV29yZCgkaHVuZHJlZHMsICfRgNGD0LHQu9GMLicsICfRgNGD0LHQu9GPLicsICfRgNGD0LHQu9C10LkuJyk7CiAgICB9CgogICAgJHJlc3VsdCA9IGltcGxvZGUoIiAiLCAkdGV4dCk7CiAgICAkcmVzdWx0ID0gbWFrZUZpcnN0TGV0dGVyVXBwZXJjYXNlKCRyZXN1bHQpOwoKICAgIHJldHVybiAkcmVzdWx0Owp9CgokYW1vdW50ID0gbXRfcmFuZCgwLCA5OTkpOwokdGV4dCA9IG51bWJlclRvVGV4dCgkYW1vdW50KTsKZWNobyAi0J3QsCDQstCw0YjQtdC8INGB0YfQtdGC0YM6IHskdGV4dH0gKHskYW1vdW50fSlcbiI7CgokYW1vdW50ID0gbXRfcmFuZCgxMDAwLCA5OTk5KTsKJHRleHQgPSBudW1iZXJUb1RleHQoJGFtb3VudCk7CmVjaG8gItCd0LAg0LLQsNGI0LXQvCDRgdGH0LXRgtGDOiB7JHRleHR9ICh7JGFtb3VudH0pXG4iOwoKJGFtb3VudCA9IG10X3JhbmQoMTAwMDAsIDk5OTk5KTsKJHRleHQgPSBudW1iZXJUb1RleHQoJGFtb3VudCk7CmVjaG8gItCd0LAg0LLQsNGI0LXQvCDRgdGH0LXRgtGDOiB7JHRleHR9ICh7JGFtb3VudH0pXG4iOwoKJGFtb3VudCA9IG10X3JhbmQoMTAwMDAwLCA5OTk5OTkpOwokdGV4dCA9IG51bWJlclRvVGV4dCgkYW1vdW50KTsKZWNobyAi0J3QsCDQstCw0YjQtdC8INGB0YfQtdGC0YM6IHskdGV4dH0gKHskYW1vdW50fSlcbiI7CgokYW1vdW50ID0gbXRfcmFuZCgxMDAwMDAwLCA5OTk5OTk5KTsKJHRleHQgPSBudW1iZXJUb1RleHQoJGFtb3VudCk7CmVjaG8gItCd0LAg0LLQsNGI0LXQvCDRgdGH0LXRgtGDOiB7JHRleHR9ICh7JGFtb3VudH0pXG4iOwoKJGFtb3VudCA9IG10X3JhbmQoMTAwMDAwMDAsIDk5OTk5OTk5KTsKJHRleHQgPSBudW1iZXJUb1RleHQoJGFtb3VudCk7CmVjaG8gItCd0LAg0LLQsNGI0LXQvCDRgdGH0LXRgtGDOiB7JHRleHR9ICh7JGFtb3VudH0pXG4iOwoKJGFtb3VudCA9IDExMDExMDExOwokdGV4dCA9IG51bWJlclRvVGV4dCgkYW1vdW50KTsKZWNobyAi0J3QsCDQstCw0YjQtdC8INGB0YfQtdGC0YM6IHskdGV4dH0gKHskYW1vdW50fSlcbiI7CgokYW1vdW50ID0gMTEwMTIwMTM7CiR0ZXh0ID0gbnVtYmVyVG9UZXh0KCRhbW91bnQpOwplY2hvICLQndCwINCy0LDRiNC10Lwg0YHRh9C10YLRgzogeyR0ZXh0fSAoeyRhbW91bnR9KVxuIjs=