เทคนิกการเขียนโค้ดแปลงตัวเลขให้เป็นตัวอักษรภาษาไทย PHP Code Thai BathText

แชร์ประสบการณ์เขียนโค้ด php + Mysql เล็ก ๆ น้อย ๆ เผื่อจะเป็นประโยชน์กับใครสักคน...

วันนี้ไม่มีอะไรทำ ก็เลยว่างหาฟังก์ชั่นแปลงตัวเลขให้เป็นตัวหนังสือ(ตัวอักษรภาษาไทย) ดู ถ้าใครเคยใช้ Excel ก็อาจจะคุ้น ๆ หูกันฟังก์ชั่น BathText ใน Excel นะครับ ก็เป็นฟังก์ชั่นที่เอาไว้เปลี่ยนตัวเลขให้เป็นตัวอักษรนั่นหล่ะครับ จะนิยมใช้ในบิลและเอกสารเกี่ยวกับการเงินต่างๆ ไม่ว่าจะเป็นการวางบิล เปิดบิล จ่ายเช็ค ที่จริงก็เกือบ ๆ จะทุกอย่างที่เกี่ยวกับการรับ จ่ายเงิน จะมีช่องให้ระบุจำนวนเงินแบบตัวอักษรเสมอ

 ตัวอย่างเช่น 

1111111.11
หนึ่งล้านหนึ่งแสนหนึ่งหมื่นหนึ่งพันหนึ่งร้อยเอ็ดบาท สิบเอ็ดสตางค์

 แต่ถ้าจะหาฟังก์ชั่นนี้ใน PHP แล้วหล่ะก็ ขอบอกเลยครับว่า ...ไม่มีแบบสำเร็จให้เรียกใช้ได้เลยนะครับ (แต่ก็คงมีโปรแกรมเมอร์เก่ง ๆ ทำไว้บ้างแล้ว ยังไงก็ลองหาดูนะครับ) ก็เลยไปค้นหาดู ก็เจอหลาย ๆ เว็บที่เขาเขียนขึ้นมา โค้ดข้างล่างนี้ผมดัดแปลงจากโค้ดตัวอย่างในเว็บนะครับ เขาใช้ภาษา หรือ ฟังก์ชั่นซับซ้อนเกินไป ผมดูแล้วเข้าใจยาก ก็เลยทำใหม่ซะเลย เพราะที่เขาทำไว้ รู้สึกว่าจะยังไม่ครบถ้วนในหลาย ๆ จุด ผมก็เลยจัดใหม่ ให้ครบถ้วน สมบูรณ์แบบที่สุดนะครับ

ก็ได้โค้ดตามนี้ครับผม...(ก๊อปไปเทสได้เลยนะครับ)


<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>php bathtext by www.code-father.com</title>
<?
$input_number='125821.11';
echo $input_number."<br>";
$digit=array('ศูนย์','หนึ่ง','สอง','สาม','สี่','ห้า','หก','เจ็ด','แปด','เก้า','สิบ');
$digit2=array('','สิบ','ร้อย','พัน','หมื่น','แสน','ล้าน');
$explode_number = explode(".",$input_number);
$num0=$explode_number[0]; // เลขจำนวนเต็ม
$num1=$explode_number[1]; // หลักทศนิยม
$len_number=strlen($num0); // นับจำนวนตัวเลข ว่ามากว่า 7 หรือไม่
$num=substr($num0,0,$len_number-6); // ตัดเอาส่วนที่เกิน 7 หลัก พันล้าน ร้อยล้าน
$num0=substr($num0,$len_number-6,$len_number); // ตัดเอา 7 หลัก
if($num!=''){
    // เลขจำนวนเต็ม ที่เกิน 7 หลัก (หลักพันล้าน ร้อยล้าน)
    $didit2_chk=strlen($num)-1;
    for($i=0;$i<=strlen($num)-1;$i++){
        
            $cut_input_number=substr($num,$i,1);
            
            if($cut_input_number==0){ // ถ้าเลข 0 ไม่ต้องใส่ค่าอะไร
                //$bathtext1.=''."".$digit2[$didit2_chk]; 
            }elseif($cut_input_number==2 && $didit2_chk==1){ // ถ้าเลข 2 อยู่หลักสิบ
                $bathtext1.='ยี่'."".$digit2[$didit2_chk]; 
            }elseif($cut_input_number==1 && $didit2_chk==1){ // ถ้าเลข 1 อยู่หลักสิบ
                //$bathtext1.= ''."".$digit2[$didit2_chk];    
            }elseif($cut_input_number==1 && $didit2_chk==0){ // ถ้าเลข 1 อยู่หลักหน่วย
                if(substr($num0,$i-1,1)==0){
                    $bathtext1.= 'หนึ่ง'."".$digit2[$didit2_chk];
                }else{
                    $bathtext1.= 'เอ็ด'."".$digit2[$didit2_chk];
                }    
                        
            }else{
                $bathtext1.= $digit[$cut_input_number]."".$digit2[$didit2_chk];
            }
            
            
            $didit2_chk=$didit2_chk-1;
    }
    $bathtext1.='ล้าน ';
}
// เลขจำนวนเต็ม 
$didit2_chk=strlen($num0)-1;
for($i=0;$i<=strlen($num0)-1;$i++){
    
        $cut_input_number=substr($num0,$i,1);
        
        if($cut_input_number==0){ // ถ้าเลข 0 ไม่ต้องใส่ค่าอะไร
            //$bathtext1.=''."".$digit2[$didit2_chk]; 
        }elseif($cut_input_number==2 && $didit2_chk==1){ // ถ้าเลข 2 อยู่หลักสิบ
            $bathtext1.='ยี่'."".$digit2[$didit2_chk]; 
        }elseif($cut_input_number==1 && $didit2_chk==1){ // ถ้าเลข 1 อยู่หลักสิบ
            //$bathtext1.= ''."".$digit2[$didit2_chk];    
        }elseif($cut_input_number==1 && $didit2_chk==0){ // ถ้าเลข 1 อยู่หลักหน่วย
            if(substr($num0,$i-1,1)==0){
                $bathtext1.= 'หนึ่ง'."".$digit2[$didit2_chk];
            }else{
                $bathtext1.= 'เอ็ด'."".$digit2[$didit2_chk];
            }    
                    
        }else{
            $bathtext1.= $digit[$cut_input_number]."".$digit2[$didit2_chk];
        }
        
        
        $didit2_chk=$didit2_chk-1;
}
$bathtext1.='บาท ';
// เลขทศนิยม
$didit2_chk=strlen($num1)-1;
for($i=0;$i<=strlen($num1)-1;$i++){
    
        $cut_input_number=substr($num1,$i,1);
        
        if($cut_input_number==0){ // ถ้าเลข 0 ไม่ต้องใส่ค่าอะไร
        
        }elseif($cut_input_number==2 && $didit2_chk==1){ // ถ้าเลข 2 อยู่หลักสิบ
            $bathtext1.='ยี่'."".$digit2[$didit2_chk]; 
        }elseif($cut_input_number==1 && $didit2_chk==1){ // ถ้าเลข 1 อยู่หลักสิบ
            $bathtext1.= ''."".$digit2[$didit2_chk];
        }elseif($cut_input_number==1 && $didit2_chk==0){ // ถ้าเลข 1 อยู่หลักหน่วย
            if(substr($num1,$i-1,1)==0){
                $bathtext1.= 'หนึ่ง'."".$digit2[$didit2_chk];
            }else{
                $bathtext1.= 'เอ็ด'."".$digit2[$didit2_chk];
            }    
        }else{
            $bathtext1.= $digit[$cut_input_number]."".$digit2[$didit2_chk];
        }
        
        
        $didit2_chk=$didit2_chk-1;
}
$bathtext1.='สตางค์';
echo $bathtext1;
?>

หมายเหตุ : โค้ดในตัวอย่างนี้รองรับตัวเลขที่หลักล้าน ( 7 หลัก) เท่านั้นนะครับ ใครที่อยากได้เยอะกว่านี้ หลัก ล้านล้าน แสนล้าน พันล้าน ก็เพิ่มเติมโค้ดเอาเองนะครับ หวังว่าคงจะเป็นประโยชน์หรือแนวทางให้เพื่อน ๆ โปรแกรมเมอร์ได้บ้าง ไม่มากก็น้อย หากมีอะไรผิดพลาดไป ก็ต้องขออภัยทุกท่านมา ณ ที่นี้ด้วยนะครับผม

 ขอบคุณครับ ที่แวะเข้ามาเยี่ยมชม www.code-father.com



My Article
แนะนำเว็บสูตรหวยออนไลน์ ดูฟรี