Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/05/2009, 12:33
Avatar de ginitofl
ginitofl
 
Fecha de Ingreso: diciembre-2006
Ubicación: Lima Perú
Mensajes: 349
Antigüedad: 19 años, 10 meses
Puntos: 22
[APORTE] Funcion para convertir numeros a letras

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 &#37; 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.

Última edición por ginitofl; 08/05/2009 a las 22:52 Razón: Ajustar Detalles