• Xhanch - WP Manga - Have your own automated manga reader website

PHP Script – Transform Number To English Words

Need to transform or convert numeric value(number) to words (English version)? In this article, we provide you with a ready used PHP function that can do that task for you. This function also can be use to convert currency to words. This is usually being used in invoice generation.

Source Code

<?php
    //By    : Xhanch Studio
    //URL   : http://xhanch.com/

    function get_num_name($num){
        switch($num){
            case 1:return 'one';
	    case 2:return 'two';
	    case 3:return 'three';
	    case 4:return 'four';
	    case 5:return 'five';
	    case 6:return 'six';
	    case 7:return 'seven';
	    case 8:return 'eight';
	    case 9:return 'nine';
        }
    }

    function num_to_words($number, $real_name, $decimal_digit, $decimal_name){
        $res = '';
        $real = 0;
        $decimal = 0;

        if($number == 0)
            return 'Zero'.(($real_name == '')?'':' '.$real_name);
        if($number >= 0){
            $real = floor($number);
            $decimal = number_format($number - $real, $decimal_digit, '.', ',');
        }else{
            $real = ceil($number) * (-1);
            $number = abs($number);
            $decimal = number_format($number - $real, $decimal_digit, '.', ',');
        }
        $decimal = substr($decimal, strpos($decimal, '.') +1);

        $unit_name[1] = 'thousand';
        $unit_name[2] = 'million';
        $unit_name[3] = 'billion';
        $unit_name[4] = 'trillion';

        $packet = array();	

        $number = strrev($real);
        $packet = str_split($number,3);

        for($i=0;$i<count($packet);$i++){
            $tmp = strrev($packet[$i]);
            $unit = $unit_name[$i];
            if((int)$tmp == 0)
                continue;
            $tmp_res = '';
            if(strlen($tmp) >= 2){
                $tmp_proc = substr($tmp,-2);
                switch($tmp_proc){
                    case '10':
                        $tmp_res = 'ten';
                        break;
                    case '11':
                        $tmp_res = 'eleven';
                        break;
                    case '12':
                        $tmp_res = 'twelve';
                        break;
                    case '13':
                        $tmp_res = 'thirteen';
                        break;
                    case '15':
                        $tmp_res = 'fifteen';
                        break;
                    case '20':
                        $tmp_res = 'twenty';
                        break;
                    case '30':
                        $tmp_res = 'thirty';
                        break;
                    case '40':
                        $tmp_res = 'forty';
                        break;
                    case '50':
                        $tmp_res = 'fifty';
                        break;
                    case '70':
                        $tmp_res = 'seventy';
                        break;
                    case '80':
                        $tmp_res = 'eighty';
                        break;
                    default:
                        $tmp_begin = substr($tmp_proc,0,1);
                        $tmp_end = substr($tmp_proc,1,1);

                        if($tmp_begin == '1')
                            $tmp_res = get_num_name($tmp_end).'teen';
                        elseif($tmp_begin == '0')
                            $tmp_res = get_num_name($tmp_end);
                        elseif($tmp_end == '0')
                            $tmp_res = get_num_name($tmp_begin).'ty';
                        else{
                            if($tmp_begin == '2')
                                $tmp_res = 'twenty';
                            elseif($tmp_begin == '3')
                                $tmp_res = 'thirty';
                            elseif($tmp_begin == '4')
                                $tmp_res = 'forty';
                            elseif($tmp_begin == '5')
                                $tmp_res = 'fifty';
                            elseif($tmp_begin == '6')
                                $tmp_res = 'sixty';
                            elseif($tmp_begin == '7')
                                $tmp_res = 'seventy';
                            elseif($tmp_begin == '8')
                                $tmp_res = 'eighty';
                            elseif($tmp_begin == '9')
                                $tmp_res = 'ninety';

                            $tmp_res = $tmp_res.' '.get_num_name($tmp_end);
                        }
                        break;
                }

                if(strlen($tmp) == 3){
                    $tmp_begin = substr($tmp,0,1);

                    $space = '';
                    if(substr($tmp_res,0,1) != ' ' && $tmp_res != '')
                        $space = ' ';

                    if($tmp_begin != 0){
                        if($tmp_begin != '0'){
                            if($tmp_res != '')
                                $tmp_res = 'and'.$space.$tmp_res;
                        }
                        $tmp_res = get_num_name($tmp_begin).' hundred'.$space.$tmp_res;
                    }
                }
            }else
                $tmp_res = get_num_name($tmp);
            $space = '';
            if(substr($res,0,1) != ' ' && $res != '')
                $space = ' ';
            $res = $tmp_res.' '.$unit.$space.$res;
        }

        $space = '';
        if(substr($res,-1) != ' ' && $res != '')
            $space = ' ';

        if($res)
            $res .= $space.$real_name.(($real > 1 && $real_name != '')?'s':'');

        if($decimal > 0)
            $res .= ' '.num_to_words($decimal, '', 0, '').' '.$decimal_name.(($decimal > 1 && $decimal_name != '')?'s':'');
        return ucfirst($res);
    }

    //Examples:

    echo num_to_words('11314', '', 0, '').'<br/>';
    //Result: Eleven thousand three hundred and fourteen
    echo num_to_words('12500', '', 0, '').'<br/>';
    //Result: Twelve thousand five hundred
    echo num_to_words('1234567890', '', 0, '').'<br/>';
    //Result: One billion two hundred and thirty four million five hundred and sixty seven thousand eight hundred and ninety
    echo num_to_words('325.25', 'euro', 2, 'cent').'<br/>';
    //Result: Three hundred and twenty five euros Twenty five cents
    echo num_to_words('1234567890.25', 'dollar', 2, 'cent').'<br/>';
    //Result: One billion two hundred and thirty four million five hundred and sixty seven thousand eight hundred and ninety dollars Twenty five cents
?>

Click here to support our work. Thanks :)


3 Responses to “PHP Script – Transform Number To English Words”

  1. Andrei says:

    This is the best article I have found on this topic yet!
    Works just fine!

Leave a Reply

  • NOTICE

    Xhanch Studio is finally online after successfully moved from shared hosting to our own VPS Hosting.

    Please note that our primary email admin@xhanch.com is not functioning yet. So, please send your emails to xhanch@gmail.com for the moment until we resolve this issue.

    Regards, Xhanch Studio
  • Sponsored Ads

    WalkNote.com - A Place to Share, Have Fun and Get Connected Place you ad here
  • PayPal Verified

    Happy with our free services? You may donate us. Thanks!

    Donate
  • Latest Tweets

    Here are our recent tweets:

    • @xhanch Your a legend!!! I have just used the first part of the code so the links are a different colour and it looks fab, Thanks! - posted on 3 days ago via Tweetie for Mac

    • Xhanch - My Twitter 2.0.2 is released. Some minor fixings - posted on 3 days ago via web

    • We have finished the website migration to a VPS server - posted on 3 days ago via web

    • @Bunglenick put this code to custom CSS: {xmt_id}.xmt ul li.tweet_list{color:#ffffff} {xmt_id}.xmt ul li.tweet_list a{color:#ffffff} - posted on 3 days ago via web

    • @xhanch Hi there, how do I go about changing the colour of the text in your twitter app? Its black but I need white. - posted on 5 days ago via Tweetie for Mac