Monday, 2 February 2015

Convert Numbers to Words

Convert Numbers to Words

This little script was whipped up to convert numbers to words for use in a cheque book, it has an upper limit of 999999999 but that should take care of most sane amounts of cash. Should you require a function that needs to spell out more cash than this, my rates are $7474.00/hr ;)

<?php/** 
*  Function:   convert_number 
*
*  Description: 
*  Converts a given integer (in range [0..1T-1], inclusive) into 
*  alphabetical format ("one", "two", etc.)
*
*  @int
*
*  @return string
*
*/ 
function convert_number($number

    if ((
$number 0) || ($number 999999999)) 
    { 
    throw new 
Exception("Number is out of range");
    } 

    
$Gn floor($number 1000000);  /* Millions (giga) */ 
    
$number -= $Gn 1000000
    
$kn floor($number 1000);     /* Thousands (kilo) */ 
    
$number -= $kn 1000
    
$Hn floor($number 100);      /* Hundreds (hecto) */ 
    
$number -= $Hn 100
    
$Dn floor($number 10);       /* Tens (deca) */ 
    
$n $number 10;               /* Ones */ 

    
$res ""

    if (
$Gn
    { 
        
$res .= convert_number($Gn) . " Million"
    } 

    if (
$kn
    { 
        
$res .= (empty($res) ? "" " ") . 
            
convert_number($kn) . " Thousand"
    } 

    if (
$Hn
    { 
        
$res .= (empty($res) ? "" " ") . 
            
convert_number($Hn) . " Hundred"
    } 

    
$ones = array("""One""Two""Three""Four""Five""Six"
        
"Seven""Eight""Nine""Ten""Eleven""Twelve""Thirteen"
        
"Fourteen""Fifteen""Sixteen""Seventeen""Eightteen"
        
"Nineteen"); 
    
$tens = array("""""Twenty""Thirty""Fourty""Fifty""Sixty"
        
"Seventy""Eigthy""Ninety"); 

    if (
$Dn || $n
    { 
        if (!empty(
$res)) 
        { 
            
$res .= " and "
        } 

        if (
$Dn 2
        { 
            
$res .= $ones[$Dn 10 $n]; 
        } 
        else 
        { 
            
$res .= $tens[$Dn]; 

            if (
$n
            { 
                
$res .= "-" $ones[$n]; 
            } 
        } 
    } 

    if (empty(
$res)) 
    { 
        
$res "zero"
    } 

    return 
$res


$cheque_amt 8747484 
try
    {
    echo 
convert_number($cheque_amt);
    }
catch(
Exception $e)
    {
    echo 
$e->getMessage();
    }
?>

0 comments:

Post a Comment