<?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 > 19) {
return $number % 10;
} else {
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) . "({$originalNumber}) " . inclineWord(getLastDigit($smallerNumber), "миллион ", "миллиона ", "миллионов ");
$number -= $smallerNumber * 1000000;
} elseif ($number > 999) {
$text .= smallNumberToText($smallerNumber, 1) . "({$originalNumber}) " . inclineWord(getLastDigit($smallerNumber), "тысяча ", "тысячи ", "тысяч ");
$number -= $smallerNumber * 1000;
} else {
$text .= smallNumberToText($number, 0) . "({$originalNumber}) " . inclineWord(getLastDigit($number), "рубль", "рубля", "рублей");
break;
}
}
return $text;
}
echo numberToText(10);
PD9waHAKIAovLyBTdGFyaW5nIHN0cmFpZ2h0IHVwIGludG8gdGhlIHNreSAuLi4gb2ggbXkgbXkKZXJyb3JfcmVwb3J0aW5nKC0xKTsKbWJfaW50ZXJuYWxfZW5jb2RpbmcoJ3V0Zi04Jyk7CiAKIAovKiDQktC+0LfQstGA0LDRidCw0LXRgiDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidGD0Y4g0YfQuNGB0LvRgyDRhNC+0YDQvNGDINGB0LvQvtCy0LA6IDEg0YDRg9Cx0LvRjCwgMiDRgNGD0LHQu9GPLCA1INGA0YPQsdC70LXQuSAqLwpmdW5jdGlvbiBpbmNsaW5lV29yZCgkbnVtYmVyLCAkd29yZDEsICR3b3JkMiwgJHdvcmQzKSB7CiAgICBpZiAoJG51bWJlciA9PSAxKSB7CiAgICAgICAgcmV0dXJuICR3b3JkMTsKICAgIH0gZWxzZWlmICgkbnVtYmVyID4gMSAmJiAkbnVtYmVyIDwgNSkKICAgIHsKICAgICAgICByZXR1cm4gJHdvcmQyOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gJHdvcmQzOwogICAgfQp9CiAKLyogCiAgICDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINGH0LjRgdC70LAg0L7RgiAwINC00L4gOTk5INCyINGC0LXQutGB0YIuINCf0LDRgNCw0LzQtdGC0YAgJGlzRmVtYWxlINGA0LDQstC10L0g0L3Rg9C70Y4sIAogICAg0LXRgdC70Lgg0LzRiyDRgdGH0LjRgtCw0LXQvCDRh9C40YHQu9C+INC00LvRjyDQvNGD0LbRgdC60L7Qs9C+INGA0L7QtNCwICjQvtC00LjQvSDRgNGD0LHQu9GMKSwgCiAgICDQuCAxIOKAlCDQtNC70Y8g0LbQtdC90YHQutC+0LPQviAo0L7QtNC90LAg0YLRi9GB0Y/Rh9CwKSAKKi8KZnVuY3Rpb24gc21hbGxOdW1iZXJUb1RleHQoJG51bWJlciwgJGlzRmVtYWxlKSB7CiAgICAKICAgICR0ZXh0ID0gIiI7CiAgICAKICAgICRzcGVsbGluZyA9IGFycmF5KAogICAgICAgIDAgICA9PiAgJ9C90L7Qu9GMJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgID0+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+ICAn0LTQstC1JwogICAgKTsKIAogICAgd2hpbGUgKCRudW1iZXIgIT0gMCkgewogICAgCWlmICgkaXNGZW1hbGUgPT0gMSAmJiBhcnJheV9rZXlfZXhpc3RzKCRudW1iZXIsICRmZW1hbGVTcGVsbGluZykpIHsKICAgIAkJJHRleHQgLj0gInskZmVtYWxlU3BlbGxpbmdbJG51bWJlcl19ICI7CiAgICAJCWJyZWFrOwogICAgCX0gZWxzZWlmIChhcnJheV9rZXlfZXhpc3RzKCRudW1iZXIsICRzcGVsbGluZykpIHsKICAgIAkJJHRleHQgLj0gInskc3BlbGxpbmdbJG51bWJlcl19ICI7CiAgICAJCWJyZWFrOwogICAgCX0KICAgIAkKICAgIAlpZiAoJG51bWJlciA+IDk5KSB7CiAgICAJCSR0ZW1wID0gJG51bWJlciAtICgkbnVtYmVyICUgMTAwKTsKICAgIAkJJG51bWJlciAtPSAkdGVtcDsKICAgIAkJJHRleHQgLj0gInskc3BlbGxpbmdbJHRlbXBdfSAiOwogICAgCX0gZWxzZSB7CiAgICAJCSR0ZW1wID0gJG51bWJlciAtICgkbnVtYmVyICUgMTApOwogICAgCQkkbnVtYmVyIC09ICR0ZW1wOwogICAgCQkkdGV4dCAuPSAieyRzcGVsbGluZ1skdGVtcF19ICI7CiAgICAJfQogICAgfQogICAgCiAgICByZXR1cm4gJHRleHQ7Cn0KCmZ1bmN0aW9uIGdldExhc3REaWdpdCgkbnVtYmVyKSB7CglpZiAoJG51bWJlciA+IDE5KSB7CiAgICAJcmV0dXJuICRudW1iZXIgJSAxMDsKCX0gZWxzZSB7CgkJcmV0dXJuICRudW1iZXI7Cgl9Cn0KCmZ1bmN0aW9uIGdldFNtYWxsZXJOdW1iZXIoJG51bWJlcikgewogICAgaWYgKCRudW1iZXIgPiA5OTk5OTkpIHsKICAgICAgICAkbnVtYmVyIC89IDEwMDAwMDA7CiAgICB9IGVsc2UgewogICAgICAgICRudW1iZXIgLz0gMTAwMDsKICAgIH0KICAgIAogICAgcmV0dXJuIGludHZhbCgkbnVtYmVyKTsKfQogCmZ1bmN0aW9uIG51bWJlclRvVGV4dCgkbnVtYmVyKSB7CiAgICAKICAgICR0ZXh0ID0gIiI7CiAgICAKICAgIGlmICgkbnVtYmVyID09IDApIHsKICAgIAlyZXR1cm4gItC90L7Qu9GMICgwKSDRgNGD0LHQu9C10LkiOwogICAgfQogICAgCiAgICAkb3JpZ2luYWxOdW1iZXIgPSAkbnVtYmVyOwogICAgCiAgICB3aGlsZSAoJG51bWJlciAhPSAwKQogICAgewogICAgICAgICRzbWFsbGVyTnVtYmVyID0gZ2V0U21hbGxlck51bWJlcigkbnVtYmVyKTsKICAgICAgICBpZiAoJG51bWJlciA+IDk5OTk5OSkgewogICAgCSAgICAkdGV4dCAuPSBzbWFsbE51bWJlclRvVGV4dCgkc21hbGxlck51bWJlciwgMCkgLiAiKHskb3JpZ2luYWxOdW1iZXJ9KSAiIC4gaW5jbGluZVdvcmQoZ2V0TGFzdERpZ2l0KCRzbWFsbGVyTnVtYmVyKSwgItC80LjQu9C70LjQvtC9ICIsICLQvNC40LvQu9C40L7QvdCwICIsICLQvNC40LvQu9C40L7QvdC+0LIgIik7CiAgICAJICAgICRudW1iZXIgLT0gJHNtYWxsZXJOdW1iZXIgKiAxMDAwMDAwOwogICAgICAgIH0gZWxzZWlmICgkbnVtYmVyID4gOTk5KSB7CiAgICAgICAgICAgICR0ZXh0IC49IHNtYWxsTnVtYmVyVG9UZXh0KCRzbWFsbGVyTnVtYmVyLCAxKSAuICIoeyRvcmlnaW5hbE51bWJlcn0pICIgLiBpbmNsaW5lV29yZChnZXRMYXN0RGlnaXQoJHNtYWxsZXJOdW1iZXIpLCAi0YLRi9GB0Y/Rh9CwICIsICLRgtGL0YHRj9GH0LggIiwgItGC0YvRgdGP0YcgIik7CiAgICAgICAgICAgICRudW1iZXIgLT0gJHNtYWxsZXJOdW1iZXIgKiAxMDAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0ZXh0IC49IHNtYWxsTnVtYmVyVG9UZXh0KCRudW1iZXIsIDApIC4gIih7JG9yaWdpbmFsTnVtYmVyfSkgIiAuIGluY2xpbmVXb3JkKGdldExhc3REaWdpdCgkbnVtYmVyKSwgItGA0YPQsdC70YwiLCAi0YDRg9Cx0LvRjyIsICLRgNGD0LHQu9C10LkiKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQogICAgCiAgICByZXR1cm4gJHRleHQ7Cn0KCmVjaG8gbnVtYmVyVG9UZXh0KDEwKTs=