Version: 0.2

Type: Function

Category: Money

License: GNU General Public License

Description: Converts 1234.56 to un mil docientos treinta y cuatro Pesos 56/00 MN use echo num2letra($numero);



<?php

function num2texto($numero, $moneda = "pesos", $singular = "peso")
{
    //si es 0 el nmero, no tiene caso procesar toda la informacin
    if($numero==0 || !isset($numero)){
        return "cero $moneda 00/100";
    }
    
    //en caso que sea un peso, pues igual que el 0 aparte que no muestre el plural "pesos"
    if($numero==1){
        return "un $singular 00/100";
    }
    
    //$numeros["unidad"][0][0]="cero";
    $numeros["unidad"][1][0]="un";
    $numeros["unidad"][2][0]="dos";
    $numeros["unidad"][3][0]="tres";
    $numeros["unidad"][4][0]="cuatro";
    $numeros["unidad"][5][0]="cinco";
    $numeros["unidad"][6][0]="seis";
    $numeros["unidad"][7][0]="siete";
    $numeros["unidad"][8][0]="ocho";
    $numeros["unidad"][9][0]="nueve";

    $numeros["decenas"][1][0]="diez";
    $numeros["decenas"][2][0]="veinte";
    $numeros["decenas"][3][0]="treinta";
    $numeros["decenas"][4][0]="cuarenta";
    $numeros["decenas"][5][0]="cincuenta";
    $numeros["decenas"][6][0]="sesenta";
    $numeros["decenas"][7][0]="setenta";
    $numeros["decenas"][8][0]="ochenta";
    $numeros["decenas"][9][0]="noventa";
    $numeros["decenas"][1][1][0]="dieci";
    $numeros["decenas"][1][1][1]="once";
    $numeros["decenas"][1][1][2]="doce";
    $numeros["decenas"][1][1][3]="trece";
    $numeros["decenas"][1][1][4]="catorce";
    $numeros["decenas"][1][1][5]="quince";
    $numeros["decenas"][2][1]="veinti";
    $numeros["decenas"][3][1]="treinta y ";
    $numeros["decenas"][4][1]="cuarenta y ";
    $numeros["decenas"][5][1]="cincuenta y ";
    $numeros["decenas"][6][1]="sesenta y ";
    $numeros["decenas"][7][1]="setenta y ";
    $numeros["decenas"][8][1]="ochenta y ";
    $numeros["decenas"][9][1]="noventa y ";

    $numeros["centenas"][1][0]="cien";
    $numeros["centenas"][2][0]="doscientos ";
    $numeros["centenas"][3][0]="trecientos ";
    $numeros["centenas"][4][0]="cuatrocientos ";
    $numeros["centenas"][5][0]="quinientos ";
    $numeros["centenas"][6][0]="seiscientos ";
    $numeros["centenas"][7][0]="setecientos ";
    $numeros["centenas"][8][0]="ochocientos ";
    $numeros["centenas"][9][0]="novecientos ";
    $numeros["centenas"][1][1]="ciento ";

    $postfijos[1][0]="";
    $postfijos[10][0]="";
    $postfijos[100][0]="";
    $postfijos[1000][0]=" mil ";
    $postfijos[10000][0]=" mil ";
    $postfijos[100000][0]=" mil ";
    $postfijos[1000000][0]=" millon ";
    $postfijos[10000000][0]=" millon ";
    $postfijos[100000000][0]=" millon ";
    $postfijos[1000000][1]=" millones ";
    $postfijos[10000000][1]=" millones ";
    $postfijos[100000000][1]=" millones ";

    $decimal_break=".";
    //echo "test run on ".$numero."<br>";
    $entero=strtok($numero,$decimal_break);
    $decimal=strtok($decimal_break);
    if ($decimal=="") {
        $decimal="00";
    }
    if (strlen($decimal)<2) {
        $decimal.="0";
    }
    if (strlen($decimal)>2) {
        $decimal=substr($decimal,0,2);
    }
    //echo "entero ".$entero."<br> decimal ".$decimal."<br>";

    $entero_breakdown=$entero;

    $breakdown_key=1000000000000;
    $num_string="";
    while ($breakdown_key>0.5)
    {
        $breakdown["entero"][$breakdown_key]["number"]=floor($entero_breakdown/$breakdown_key);
        //echo " ".$breakdown["entero"][$breakdown_key]["number"]."<br>";
        if ($breakdown["entero"][$breakdown_key]["number"]>0) {
            //echo " further process <br>";
            $breakdown["entero"][$breakdown_key][100]=floor($breakdown["entero"][$breakdown_key]["number"]/100);
            $breakdown["entero"][$breakdown_key][10]=floor(($breakdown["entero"][$breakdown_key]["number"]%100)/10);
            $breakdown["entero"][$breakdown_key][1]=floor($breakdown["entero"][$breakdown_key]["number"]%10);
            //echo " 100 ->".$breakdown["entero"][$breakdown_key][100]."<br>";
            //echo " 10   ->".$breakdown["entero"][$breakdown_key][10]."<br>";
            //echo " 1     ->".$breakdown["entero"][$breakdown_key][1]."<br>";

            $hundreds=$breakdown["entero"][$breakdown_key][100];
            // if not a closed value at hundredths
            if (($breakdown["entero"][$breakdown_key][10]+$breakdown["entero"][$breakdown_key][1])>0) {
                $chundreds=1;
            } else {
                $chundreds=0;
            }

            if (isset($numeros["centenas"][$hundreds][$chundreds])) {
                //echo " centenas ".$numeros["centenas"][$hundreds][$chundreds]."<br>";
                $num_string.=$numeros["centenas"][$hundreds][$chundreds];
            } else {
                //echo " centenas ".$numeros["centenas"][$hundreds][0]."<br>";
                if(isset($numeros["centenas"][$hundreds][0])){
                    $num_string.=$numeros["centenas"][$hundreds][0];
                }
            }

            if (($breakdown["entero"][$breakdown_key][1])>0) {
                $ctens=1;
                $tens=$breakdown["entero"][$breakdown_key][10];
                //echo "NOT CLOSE TENTHS<br>";
                if (($breakdown["entero"][$breakdown_key][10])==1) {
                    if (($breakdown["entero"][$breakdown_key][1])<6) {
                        $cctens=$breakdown["entero"][$breakdown_key][1];
                        //echo " decenas ".$numeros["decenas"][$tens][$ctens][$cctens]."<br>";
                        $num_string.=$numeros["decenas"][$tens][$ctens][$cctens];
                    } else {
                        //echo " decenas ".$numeros["decenas"][$tens][$ctens][0]."<br>";
                        $num_string.=$numeros["decenas"][$tens][$ctens][0];
                    }
                } else {
                    //echo " decenas ".$numeros["decenas"][$tens][$ctens]."<br>";
                    if(isset($numeros["decenas"][$tens][$ctens])){
                        $num_string.=$numeros["decenas"][$tens][$ctens];
                    }
                }
            } else {
                //echo "CLOSED TENTHS<br>";
                $ctens=0;
                $tens=$breakdown["entero"][$breakdown_key][10];
                //echo " decenas ".$numeros["decenas"][$tens][$ctens]."<br>";
                if(isset($numeros["decenas"][$tens][$ctens])){
                    $num_string.=$numeros["decenas"][$tens][$ctens];
                }
            }



            if (!(isset($cctens))) {
                $ones=$breakdown["entero"][$breakdown_key][1];
                if (isset($numeros["unidad"][$ones][0])) {
                    //echo " tens ".$numeros["unidad"][$ones][0]."<br>";
                    $num_string.=$numeros["unidad"][$ones][0];
                }
            }
            
            $cpostfijos=-1;
            if ($breakdown["entero"][$breakdown_key]["number"]>1) {
                $cpostfijos=1;
            }


            if (isset($postfijos[$breakdown_key][$cpostfijos])) {
                $num_string.=$postfijos[$breakdown_key][$cpostfijos];
            } else {
                $num_string.=$postfijos[$breakdown_key][0];
            }

        }
        unset($cctens);
        $entero_breakdown%=$breakdown_key;
        $breakdown_key/=1000;

        //echo "CADENA ".$num_string."<br>";
    }
    return  $num_string." $moneda ".$decimal."/100 M.N.";

}

?>