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();
}
?>

Advertisements