2018年10月5日 星期五

[程式設計] PHP阿拉伯數字轉大寫國字,寫會計系統必用的函數

一些比較正式的系統,對於數字很敏感,除了要有逗號(使用內建number_format函數)分隔格式之外,需要大寫國字,比如說10000,需要寫成10,000,或者寫成壹萬,尤其在會計帳務、請款單、收據、發票、報表...,很多地方都會要求有這樣功能,以下我們就來教學一下,PHP到底怎麼實現呢?

程式碼如下:

<?php
function num2cht($num){
  $numc ="零,壹,貳,參,肆,伍,陸,柒,捌,玖";
  $unic = ",拾,佰,仟";
  $unic1 = "元整,萬,億,兆,京";
  $numc_arr = split(",", $numc);
  $unic_arr = split(",", $unic);
  $unic1_arr = split(",", $unic1);
  $i = str_replace(",", "", $num);
  $c0 = 0;
  $str = array();
  do{
    $aa = 0;
    $c1 = 0;
    $s = "";
    $lan = (strlen($i) >= 4) ? 4 : strlen($i);
    $j = substr($i, -$lan);
    while($j > 0){
      $k = $j % 10;
      if($k > 0) {
        $aa = 1;
        $s = $numc_arr[$k].$unic_arr[$c1].$s;
      }elseif($k == 0) {
        if($aa == 1) $s = "0".$s;
      }
      $j = intval($j / 10);
      $c1 += 1;
    }
    $str[$c0] = ($s == '') ? '' : $s.$unic1_arr[$c0];
    $count_len = strlen($i) - 4;
    $i = ($count_len > 0) ? substr($i, 0, $count_len) : '';
    $c0 += 1;
  }while($i != '');
  foreach($str as $v) $string .= array_pop($str);
  $string = preg_replace('/0+/', '零', $string);
  return $string;
}
?>

使用方法:

<?php
$a = 123456789;
$b = 123456;
$c = 1500;
echo $a." = ".num2cht($a)."\n";
echo $b." = ".num2cht($b)."\n";
echo $c." = ".num2cht($c)."\n";
?>

執行結果:

123456789 = 壹億貳仟參佰肆拾伍萬陸仟柒佰捌拾玖元整
123456 = 壹拾貳萬參仟肆佰伍拾陸元整
1500 = 壹仟伍佰元整

沒有留言:

張貼留言