Gerando números Romanos com PHP

Artigo que apresenta a implementação de uma função em PHP para geração de números romanos a partir de números decimais.

Número Romano

Esta função serve para gerar números Romanos em PHP (com letras maiúsculas). Para converter para minúsculas, basta usar a função strtolower.

Linguagem: PHP

Copyright 2011 Rubens Takiguti Ribeiro

Licença: LGPL 3 ou superior

/**
 * Converte de numero arabico para romano
 * @param int $numero numero arabico
 * @return string numero romano em letras maiusculas
 */
function numero_romano($numero) {
    if ($numero <= 0 || $numero > 3999) {
        return $numero;
    }

    $n = (int)$numero;
    $y = '';

    // Nivel 1
    while (($n / 1000) >= 1) {
        $y .= 'M';
        $n -= 1000;
    }
    if (($n / 900) >= 1) {
        $y .= 'CM';
        $n -= 900;
    }
    if (($n / 500) >= 1) {
        $y .= 'D';
        $n -= 500;
    }
    if (($n / 400) >= 1) {
        $y .= 'CD';
        $n -= 400;
    }

    // Nivel 2
    while (($n / 100) >= 1) {
        $y .= 'C';
        $n -= 100;
    }
    if (($n / 90) >= 1) {
        $y .= 'XC';
        $n -= 90;
    }
    if (($n / 50) >= 1) {
        $y .= 'L';
        $n -= 50;
    }
    if (($n / 40) >= 1) {
        $y .= 'XL';
        $n -= 40;
    }

    // Nivel 3
    while (($n / 10) >= 1) {
        $y .= 'X';
        $n -= 10;
    }
    if (($n / 9) >= 1) {
        $y .= 'IX';
        $n -= 9;
    }
    if (($n / 5) >= 1) {
        $y .= 'V';
        $n -= 5;
    }
    if (($n / 4) >= 1) {
        $y .= 'IV';
        $n -= 4;
    }

    // Nivel 4
    while ($n >= 1) {
        $y .= 'I';
        $n -= 1;
    }

    return $y;
}

1 comentário

Anônimo disse...

Tava tentando fazer uma função no mysql pra isso.
Gostei bastante da tua lógica, vou seguir ela pra fazer!
Obrigado, Rubens!