<?php
// Staring straight up into the sky ... oh my my
/* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */
function inclineWord($number, $word1, $word2, $word3) {
if ($number == 1) {
return $word1;
} elseif ($number > 1 && $number < 5)
{
return $word2;
} else {
return $word3;
}
}
/*
Преобразует числа от 0 до 999 в текст. Параметр $isFemale равен нулю,
если мы считаем число для мужского рода (один рубль),
и 1 — для женского (одна тысяча)
*/
function smallNumberToText($number, $isFemale) {
$text = "";
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 => 'две'
);
while ($number != 0) {
$text .= "{$femaleSpelling[$number]} ";
break;
$text .= "{$spelling[$number]} ";
break;
}
if ($number > 99) {
$temp = $number - ($number % 100);
$number -= $temp;
$text .= "{$spelling[$temp]} ";
} else {
$temp = $number - ($number % 10);
$number -= $temp;
$text .= "{$spelling[$temp]} ";
}
}
return $text;
}
function getLastDigit($number) {
if ($number > 99) {
$number %= 100;
}
if ($number > 19) {
$number %= 10;
}
return $number;
}
function getSmallerNumber($number) {
if ($number > 999999) {
$number /= 1000000;
} else {
$number /= 1000;
}
}
function numberToText($number) {
$text = "";
if ($number == 0) {
return "ноль (0) рублей";
}
$originalNumber = $number;
while ($number != 0)
{
$smallerNumber = getSmallerNumber($number);
if ($number > 999999) {
$text .= smallNumberToText($smallerNumber, 0) . inclineWord(getLastDigit($smallerNumber), "миллион ", "миллиона ", "миллионов ");
$number -= $smallerNumber * 1000000;
} elseif ($number > 999) {
$text .= smallNumberToText($smallerNumber, 1) . inclineWord(getLastDigit($smallerNumber), "тысяча ", "тысячи ", "тысяч ");
$number -= $smallerNumber * 1000;
} else {
$text .= smallNumberToText($number, 0) . "({$originalNumber}) " . inclineWord(getLastDigit($number), "рубль", "рубля", "рублей");
break;
}
}
return $text;
}
echo numberToText(11340);
ICAgIDw/cGhwCiAgICAgCiAgICAvLyBTdGFyaW5nIHN0cmFpZ2h0IHVwIGludG8gdGhlIHNreSAuLi4gb2ggbXkgbXkKICAgIGVycm9yX3JlcG9ydGluZygtMSk7CiAgICBtYl9pbnRlcm5hbF9lbmNvZGluZygndXRmLTgnKTsKICAgICAKICAgICAKICAgIC8qINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINGB0L7QvtGC0LLQtdGC0YHRgtCy0YPRjtGJ0YPRjiDRh9C40YHQu9GDINGE0L7RgNC80YMg0YHQu9C+0LLQsDogMSDRgNGD0LHQu9GMLCAyINGA0YPQsdC70Y8sIDUg0YDRg9Cx0LvQtdC5ICovCiAgICBmdW5jdGlvbiBpbmNsaW5lV29yZCgkbnVtYmVyLCAkd29yZDEsICR3b3JkMiwgJHdvcmQzKSB7CiAgICAgICAgaWYgKCRudW1iZXIgPT0gMSkgewogICAgICAgICAgICByZXR1cm4gJHdvcmQxOwogICAgICAgIH0gZWxzZWlmICgkbnVtYmVyID4gMSAmJiAkbnVtYmVyIDwgNSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkd29yZDI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICR3b3JkMzsKICAgICAgICB9CiAgICB9CiAgICAgCiAgICAvKiAKICAgICAgICDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINGH0LjRgdC70LAg0L7RgiAwINC00L4gOTk5INCyINGC0LXQutGB0YIuINCf0LDRgNCw0LzQtdGC0YAgJGlzRmVtYWxlINGA0LDQstC10L0g0L3Rg9C70Y4sIAogICAgICAgINC10YHQu9C4INC80Ysg0YHRh9C40YLQsNC10Lwg0YfQuNGB0LvQviDQtNC70Y8g0LzRg9C20YHQutC+0LPQviDRgNC+0LTQsCAo0L7QtNC40L0g0YDRg9Cx0LvRjCksIAogICAgICAgINC4IDEg4oCUINC00LvRjyDQttC10L3RgdC60L7Qs9C+ICjQvtC00L3QsCDRgtGL0YHRj9GH0LApIAogICAgKi8KICAgIGZ1bmN0aW9uIHNtYWxsTnVtYmVyVG9UZXh0KCRudW1iZXIsICRpc0ZlbWFsZSkgewogICAgIAogICAgICAgICR0ZXh0ID0gIiI7CiAgICAgCiAgICAgICAgJHNwZWxsaW5nID0gYXJyYXkoCiAgICAgICAgICAgIDAgICA9PiAgJ9C90L7Qu9GMJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgID0+ICAn0LTQtdGB0Y/RgtGMJywgICAgICAgMTAwID0+ICAn0YHRgtC+JywKICAgICAgICAgICAgMSAgID0+ICAn0L7QtNC40L0nLCAgICAgICAgIDExICA9PiAgJ9C+0LTQuNC90L3QsNC00YbQsNGC0YwnLCAgICAgIDIwICA9PiAgJ9C00LLQsNC00YbQsNGC0YwnLCAgICAgMjAwID0+ICAn0LTQstC10YHRgtC4JywKICAgICAgICAgICAgMiAgID0+ICAn0LTQstCwJywgICAgICAgICAgMTIgID0+ICAn0LTQstC10L3QsNC00YbQsNGC0YwnLCAgICAgICAzMCAgPT4gICfRgtGA0LjQtNGG0LDRgtGMJywgICAgIDMwMCA9PiAgJ9GC0YDQuNGB0YLQsCcsCiAgICAgICAgICAgIDMgICA9PiAgJ9GC0YDQuCcsICAgICAgICAgIDEzICA9PiAgJ9GC0YDQuNC90LDQtNGG0LDRgtGMJywgICAgICAgNDAgID0+ICAn0YHQvtGA0L7QuicsICAgICAgICA0MDAgPT4gICfRh9C10YLRi9GA0LXRgdGC0LAnLAogICAgICAgICAgICA0ICAgPT4gICfRh9C10YLRi9GA0LUnLCAgICAgICAxNCAgPT4gICfRh9C10YLRi9GA0L3QsNC00YbQsNGC0YwnLCAgICAgNTAgID0+ICAn0L/Rj9GC0YzQtNC10YHRj9GCJywgICAgNTAwID0+ICAn0L/Rj9GC0YzRgdC+0YInLAogICAgICAgICAgICA1ICAgPT4gICfQv9GP0YLRjCcsICAgICAgICAgMTUgID0+ICAn0L/Rj9GC0L3QsNC00YbQsNGC0YwnLCAgICAgICA2MCAgPT4gICfRiNC10YHRgtGM0LTQtdGB0Y/RgicsICAgNjAwID0+ICAn0YjQtdGB0YLRjNGB0L7RgicsCiAgICAgICAgICAgIDYgICA9PiAgJ9GI0LXRgdGC0YwnLCAgICAgICAgMTYgID0+ICAn0YjQtdGB0YLQvdCw0LTRhtCw0YLRjCcsICAgICAgNzAgID0+ICAn0YHQtdC80YzQtNC10YHRj9GCJywgICAgNzAwID0+ICAn0YHQtdC80YzRgdC+0YInLCAgICAKICAgICAgICAgICAgNyAgID0+ICAn0YHQtdC80YwnLCAgICAgICAgIDE3ICA9PiAgJ9GB0LXQvNC90LDQtNGG0LDRgtGMJywgICAgICAgODAgID0+ICAn0LLQvtGB0LXQvNGM0LTQtdGB0Y/RgicsICAgODAwID0+ICAn0LLQvtGB0LXQvNGM0YHQvtGCJywKICAgICAgICAgICAgOCAgID0+ICAn0LLQvtGB0LXQvNGMJywgICAgICAgMTggID0+ICAn0LLQvtGB0LXQvNC90LDQtNGG0LDRgtGMJywgICAgIDkwICA9PiAgJ9C00LXQstGP0L3QvtGB0YLQvicsICAgICA5MDAgPT4gICfQtNC10LLRj9GC0YzRgdC+0YInLAogICAgICAgICAgICA5ICAgPT4gICfQtNC10LLRj9GC0YwnLCAgICAgICAxOSAgPT4gICfQtNC10LLRj9GC0L3QsNC00YbQsNGC0YwnICAgIAogICAgICAgICk7CiAgICAgCiAgICAgICAgJGZlbWFsZVNwZWxsaW5nID0gYXJyYXkoCiAgICAgICAgICAgIDEgICA9PiAgJ9C+0LTQvdCwJywgICAgICAgIDIgICA9PiAgJ9C00LLQtScKICAgICAgICApOwogICAgIAogICAgICAgIHdoaWxlICgkbnVtYmVyICE9IDApIHsKICAgICAgICAJaWYgKCRpc0ZlbWFsZSA9PSAxICYmIGFycmF5X2tleV9leGlzdHMoJG51bWJlciwgJGZlbWFsZVNwZWxsaW5nKSkgewogICAgICAgIAkJJHRleHQgLj0gInskZmVtYWxlU3BlbGxpbmdbJG51bWJlcl19ICI7CiAgICAgICAgCQlicmVhazsKICAgICAgICAJfSBlbHNlaWYgKGFycmF5X2tleV9leGlzdHMoJG51bWJlciwgJHNwZWxsaW5nKSkgewogICAgICAgIAkJJHRleHQgLj0gInskc3BlbGxpbmdbJG51bWJlcl19ICI7CiAgICAgICAgCQlicmVhazsKICAgICAgICAJfQogICAgIAogICAgICAgIAlpZiAoJG51bWJlciA+IDk5KSB7CiAgICAgICAgCQkkdGVtcCA9ICRudW1iZXIgLSAoJG51bWJlciAlIDEwMCk7CiAgICAgICAgCQkkbnVtYmVyIC09ICR0ZW1wOwogICAgICAgIAkJJHRleHQgLj0gInskc3BlbGxpbmdbJHRlbXBdfSAiOwogICAgICAgIAl9IGVsc2UgewogICAgICAgIAkJJHRlbXAgPSAkbnVtYmVyIC0gKCRudW1iZXIgJSAxMCk7CiAgICAgICAgCQkkbnVtYmVyIC09ICR0ZW1wOwogICAgICAgIAkJJHRleHQgLj0gInskc3BlbGxpbmdbJHRlbXBdfSAiOwogICAgICAgIAl9CiAgICAgICAgfQogICAgIAogICAgICAgIHJldHVybiAkdGV4dDsKICAgIH0KICAgICAKICAgIGZ1bmN0aW9uIGdldExhc3REaWdpdCgkbnVtYmVyKSB7CiAgICAJCiAgICAJaWYgKCRudW1iZXIgPiA5OSkgewogICAgCQkkbnVtYmVyICU9IDEwMDsKICAgIAl9CiAgICAJCiAgICAJaWYgKCRudW1iZXIgPiAxOSkgewogICAgCQkkbnVtYmVyICU9IDEwOwogICAgCX0KICAgIAkKICAgIAkKICAgIAlyZXR1cm4gJG51bWJlcjsKICAgIH0KICAgICAKICAgIGZ1bmN0aW9uIGdldFNtYWxsZXJOdW1iZXIoJG51bWJlcikgewogICAgICAgIGlmICgkbnVtYmVyID4gOTk5OTk5KSB7CiAgICAgICAgICAgICRudW1iZXIgLz0gMTAwMDAwMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbnVtYmVyIC89IDEwMDA7CiAgICAgICAgfQogICAgIAogICAgICAgIHJldHVybiBpbnR2YWwoJG51bWJlcik7CiAgICB9CiAgICAgCiAgICBmdW5jdGlvbiBudW1iZXJUb1RleHQoJG51bWJlcikgewogICAgIAogICAgICAgICR0ZXh0ID0gIiI7CiAgICAgCiAgICAgICAgaWYgKCRudW1iZXIgPT0gMCkgewogICAgICAgIAlyZXR1cm4gItC90L7Qu9GMICgwKSDRgNGD0LHQu9C10LkiOwogICAgICAgIH0KICAgICAKICAgICAgICAkb3JpZ2luYWxOdW1iZXIgPSAkbnVtYmVyOwogICAgIAogICAgICAgIHdoaWxlICgkbnVtYmVyICE9IDApCiAgICAgICAgewogICAgICAgICAgICAkc21hbGxlck51bWJlciA9IGdldFNtYWxsZXJOdW1iZXIoJG51bWJlcik7CiAgICAgICAgICAgIGlmICgkbnVtYmVyID4gOTk5OTk5KSB7CiAgICAgICAgCSAgICAkdGV4dCAuPSBzbWFsbE51bWJlclRvVGV4dCgkc21hbGxlck51bWJlciwgMCkgLiBpbmNsaW5lV29yZChnZXRMYXN0RGlnaXQoJHNtYWxsZXJOdW1iZXIpLCAi0LzQuNC70LvQuNC+0L0gIiwgItC80LjQu9C70LjQvtC90LAgIiwgItC80LjQu9C70LjQvtC90L7QsiAiKTsKICAgICAgICAJICAgICRudW1iZXIgLT0gJHNtYWxsZXJOdW1iZXIgKiAxMDAwMDAwOwogICAgICAgICAgICB9IGVsc2VpZiAoJG51bWJlciA+IDk5OSkgewogICAgICAgICAgICAgICAgJHRleHQgLj0gc21hbGxOdW1iZXJUb1RleHQoJHNtYWxsZXJOdW1iZXIsIDEpIC4gaW5jbGluZVdvcmQoZ2V0TGFzdERpZ2l0KCRzbWFsbGVyTnVtYmVyKSwgItGC0YvRgdGP0YfQsCAiLCAi0YLRi9GB0Y/Rh9C4ICIsICLRgtGL0YHRj9GHICIpOwogICAgICAgICAgICAgICAgJG51bWJlciAtPSAkc21hbGxlck51bWJlciAqIDEwMDA7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdGV4dCAuPSBzbWFsbE51bWJlclRvVGV4dCgkbnVtYmVyLCAwKSAuICIoeyRvcmlnaW5hbE51bWJlcn0pICIgLiBpbmNsaW5lV29yZChnZXRMYXN0RGlnaXQoJG51bWJlciksICLRgNGD0LHQu9GMIiwgItGA0YPQsdC70Y8iLCAi0YDRg9Cx0LvQtdC5Iik7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAKICAgICAgICByZXR1cm4gJHRleHQ7CiAgICB9CiAgICAKZWNobyBudW1iZXJUb1RleHQoMTEzNDApOw==