Version: 1.0

Type: Function

Category: Algorithms

License: GNU General Public License

Description: This code translate a number to letter in Spanish



<?php
#
# Number to String
#
#-----------------------------------------------
# Examples
#
# Use   : number2string(169)
# Return: ciento sesenta y nueve
#
# Use   : number2string(35.652)
# Return: treinta y cinco con seis cientos cincuenta y dos
#
#

function tercia($num)
{
    $unidades=array(0=>'cero',1=>'uno',2=>'dos',3=>'tres',4=>'cuatro',5=>'cinco',6=>'seis',7=>'siete',8=>'ocho',9=>'nueve');
    $teens=array(0=>'diez',1=>'once',2=>'doce',3=>'trece',4=>'catorce',6=>'quince');
    $tens=array(1=>'diez',2=>'veinte',3=>'treinta',4=>'cuarenta',5=>'cincuenta',6=>'sesenta',7=>'setenta',8=>'ochenta',9=>'noventa');
    

    $numero=''.$num;
    if (strlen($numero) == 1)
        $numero='00'.$numero;
    if (strlen($numero) == 2)
        $numero='0'.$numero;
    $a=$numero[0];
    $b=$numero[1];
    $c=$numero[2];

//PARA DEBUG
//    echo "A: $a<br>";
//    echo "B: $b<br>";
//    echo "C: $c<br>";
    
    if($a == 0)
    {
        if($b == 0)
        {
            
            $resultado=$unidades[$c];
            return $resultado;
        }            
        else if($b == 1)
        {
            if($c >= 0 && $c <= 5)
            {
                $resultado = $teens[$c];
                return $resultado;
            }
            else if($c >= 6 and $c <= 9)
            {
                $resultado = $tens[$b].' y '.$unidades[$c];
                return $resultado;
            }                
        }
        else if($b == 2)
        {
            if($c==0)
            {
                $resultado = 'veinte';
                return $resultado;
            }
            else if($c > 0 and $c <= 9)
            {
                $resultado='veinti'.$unidades[$c];
                return $resultado;
            }
        }                            
        else if($b >=3 and $b <= 9)
        {
            if ($c == 0)
            {
                $resultado = $tens[$b];
                return $resultado;
            }                
            if ($c >= 1 and $c <= 9)
            {
                $resultado = $tens[$b].' y '.$unidades[$c];
                return $resultado;
            }
        }                            
    }                
    if ($a == 1)
    {
        if($b == 0)
        {
            if($c == 0)
            {
                $resultado = 'cien';
                return $resultado;
            }                
            else if( $c > 0 and $c <= 9)
            {
                $resultado ='ciento '.$unidades[$c];
                return $resultado;
            }
        }                            
        else if( $b == 1)
        {
            if ($c >= 0 and $c <= 5)
            {
                $resultado = 'ciento '.$teens[$c];
                return $resultado;
            }                
            else if($c >= 6 and $c <= 9)
            {
                $resultado = 'ciento '.$tens[$b].' y '.$unidades[$c];
                return $resultado;
            }
        }                            
        else if($b == 2)
        {
            if($c == 0)
            {
                $resultado = 'ciento veinte';
                return $resultado;
            }                
            else if($c > 0 and $c <= 9)
            {
                $resultado ='ciento veinti'.$unidades[$c];
                return $resultado;
            }
        }                
        else if($b >= 3 and $b <= 9)
        {
            if($c == 0)
            {
                $resultado = 'ciento '.$tens[$b];
                return $resultado;
            }
            else if($c > 0 and $c <= 9)
            {
                $resultado='ciento '.$tens[$b].' y '.$unidades[$c];
                return $resultado;
            }
        }            
    }            
    else if($a >= 2 and $a <= 9)
    {
        if ($a == 5)
        {   $prefix='quinientos ';  }
        else if($a == 7)
        {   $prefix='setecientos '; }
        else if($a == 9)
        {   $prefix='novecientos '; }
        else
        {   $prefix=$unidades[$a].' cientos '; }
        
        if($b == 0)
        {
            if($c == 0)
            {
                $resultado = $prefix;
                return $resultado;
            }                
            else if($c > 0 and $c <= 9)
            {
                $resultado = $prefix.' '.$unidades[$c];
                return $resultado;
            }
        }                            
        else if($b == 1)
        {
            if ( $c >= 0 and $c <= 5 )
            {
                $resultado = $prefix.''.$teens[$c];
                return $resultado;
            }                
            else if($c >= 6 and $c <= 9)
            {
                $resultado = $prefix.' '.$tens[$b].' y '.$unidades[$c];
                return $resultado;
            }
        }            
        else if($b == 2)
        {
            if($c == 0)
            {
                $resultado = $prefix.' veinte';
                return $resultado;
            }
            else if($c > 0 and $c <= 9)
            {
                $resultado = $prefix.' veinti'.$unidades[$c];
                return $resultado;
            }                
        }                
        else if($b >= 3 and $b <= 9)
        {
            if($c == 0)
            {
                $resultado = $prefix.''.$tens[$b];
                return $resultado;
            }
            else if($c > 0 and $c <= 9)
            {
                $resultado = $prefix.''.$tens[$b].' y '.$unidades[$c];
                return $resultado;
            }                
        }
    }        
}

function principal($num)
{
    $result='';
    $numero=''.$num;
        
    if(strlen($numero) == 1)
        $numero='00000000'.$numero;
    if(strlen($numero) == 2)
        $numero='0000000'.$numero;
    if(strlen($numero) == 3)
        $numero='000000'.$numero;
    if(strlen($numero) == 4)
        $numero='00000'.$numero;
    if(strlen($numero) == 5)
        $numero='0000'.$numero;
    if(strlen($numero) == 6)
        $numero='000'.$numero;
    if(strlen($numero) == 7)
        $numero='00'.$numero;
    if(strlen($numero) == 8)
        $numero='0'.$numero;
    $posicion=1;

    for($j=0;$j<3;$j++)
    { 
        $i=$j*3;
        $valor=$numero[$i].$numero[$i+1].$numero[$i+2];
        if ( $valor != 0 )
        {
            $res=tercia($valor);
            if($i == 0)
            {
                $result=$res." millones ";
            }
            else if($i == 3)
            {
                $result=$result.$res." mil ";
            }                
            else if($i == 6)
            {
                $result=$result.''.$res;
            }                
        }            
    }
    return $result;
}
function number2string($number)
{
    if(! is_numeric($number) )
        return "Numero invalido";
    $number=''.$number;
    list($entero,$fraccion)=split('\.',$number);
    if($fraccion>0)
        $result=principal($entero).' con '.principal($fraccion);
    else        
        $result=principal($entero);

    return $result;
}

?>