Hola a Todos publico esta pequeña funcion para todos aquellos que necesiten de una funcion para poder convertir numeros a letras, en este caso lo hice para la moneda de Peru (Nuevo Sol), espero sus apreciaciones y tambien si hay que mejorar o cambiar algo. por ahora convierte numeros de 1 a 999999999.99, bueno la funcion es esta lo guardo como cantidadenletras.php:
Código PHP:
<?php
function CantidadEnLetra($tyCantidad)
{
$tyCantidad = round($tyCantidad * 100) / 100;
$lyCantidad = (int)$tyCantidad;
$lyCentavos = ($tyCantidad - $lyCantidad) * 100;
$lyCentavos = round($lyCentavos * 100) / 100;
$laUnidades = Array("UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE", "DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISEIS", "DIECISIETE", "DIECIOCHO", "DIECINUEVE", "VEINTE", "VEINTIUN", "VEINTIDOS", "VEINTITRES", "VEINTICUATRO", "VEINTICINCO", "VEINTISEIS", "VEINTISIETE", "VEINTIOCHO", "VEINTINUEVE");
$laDecenas = Array("DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA");
$laCentenas = Array("CIENTO", "DOSCIENTOS", "TRESCIENTOS", "CUATROCIENTOS", "QUINIENTOS", "SEISCIENTOS", "SETECIENTOS", "OCHOCIENTOS", "NOVECIENTOS");
$lnNumeroBloques = 0;
do
{
$lnNumeroBloques++;
$lnPrimerDigito = 0;
$lnSegundoDigito = 0;
$lnTercerDigito = 0;
$lcBloque = "";
$lnBloqueCero = 0;
for($i = 1; $i <= 3; $i++)
{
$lnDigito = $lyCantidad % 10;
if($lnDigito != 0)
{
switch($i)
{
case 1:
$lcBloque = " " . $laUnidades[$lnDigito - 1];
$lnPrimerDigito = $lnDigito;
break;
case 2:
If ($lnDigito <= 2)
{
$lcBloque = " " . $laUnidades[($lnDigito * 10) + $lnPrimerDigito - 1];
}
else
{
if($lnPrimerDigito != 0)
{
$y =" Y";
}
else
{
$y=" ";
}
$lcBloque = " " . $laDecenas[$lnDigito - 1] . $y . $lcBloque;
}
$lnSegundoDigito = $lnDigito;
break;
case 3:
if($lnDigito == 1 and $lnPrimerDigito == 0 and $lnSegundoDigito == 0)
{
$cien = "CIEN";
}
else
{
$cien = $laCentenas[$lnDigito - 1];
}
$lcBloque = " " . $cien . $lcBloque;
$lnTercerDigito = $lnDigito;
break;
}
}
else
{
$lnBloqueCero = $lnBloqueCero + 1;
}
$lyCantidad = $lyCantidad / 10;
$lyCantidad = (int)$lyCantidad;
If ($lyCantidad == 0)
{
break;
}
}
switch($lnNumeroBloques)
{
case 1:
$CantidadEnLetra = $lcBloque;
$CORTALETRA = substr($CantidadEnLetra, -2);
if ($CORTALETRA == "UN")
{
$CantidadEnLetra = $lcBloque . "O";
}
break;
case 2:
if ($lcBloque == " UN")
{
if($lnBloqueCero != 3)
{
$mil= " MIL";
}
$CantidadEnLetra = $mil . $CantidadEnLetra;
$CORTALETRA = substr($CantidadEnLetra, -2);
if ($CORTALETRA == "UN")
{
$CantidadEnLetra = $lcBloque . "O";
}
}
else
{
if($lnBloqueCero != 3)
{
$mil=" MIL";
}
$CantidadEnLetra = $lcBloque . $mil . $CantidadEnLetra;
$CORTALETRA = substr($CantidadEnLetra, -2);
if (CORTALETRA == "UN")
{
$CantidadEnLetra = $lcBloque . "O";
}
}
break;
case 3:
if($lnPrimerDigito == 1 And $lnSegundoDigito == 0 And $lnTercerDigito == 0)
{
$millon= " MILLON";
}
else
{
$millon= " MILLONES";
}
$CantidadEnLetra = $lcBloque . $millon . $CantidadEnLetra;
$CORTALETRA = substr($CantidadEnLetra, -2);
if ($CORTALETRA == "UN")
{
$CantidadEnLetra = $lcBloque . "O";
}
break;
}
}while($lyCantidad > 0);
$con=" CON ";
$CantidadEnLetra = $CantidadEnLetra . $con . $lyCentavos . "/100 NUEVOS SOLES";
return $CantidadEnLetra;
}
//PARA LLAMAR A LA FUNCION
//echo CantidadEnLetra(1289191);
//echo "<br>";
//CantidadEnLetra(999999999.99);
?>
Saludos.