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.";
}
?>