PHP

숫자를 한자로 바꾸기

0hee 2010. 12. 14. 14:32

function num2hanja_v2($number)
{
    //echo $number;
    // 사용할 상수들
    $s_number = array("","一","二","三","四","五","六","七","八","九");
    $s_numbert = array("","一","二","三","四","五","六","七","八","九");
    $s_weights = array("","十","拾","百");
    $s_weightb = array("","萬 ","億 ","億 ","京","垓");
    $s_zero = array("영","영","공");
    $s_dot = "점 ";
    $s_minus = "마이너스 ";

    // 우선 -부호를 처리해준다.
    if($minus = (substr($number,0,1) == "-")) $number = substr($number,1);

    // 소숫점의 위치를 알아낸다.
    if(($has_point = $point = strpos($number,".")) === false) $point = strlen($number);

    // 우선 정수부분부터 처리한다.
    $part = "";
    for($i=$point-1;$i>=0;$i--)
    {
        // 뒤부터 한자리씩 저장한다.
        $part = $number[$i].$part;

        // 그렇게 해서 4자리가 채워지거나, 더이상 숫자를 넣을 수 없다면...
        if(strlen($part)==4 || $i==0)
        {
            $s_part = "";
            for($j=strlen($part)-1;$j>=0;$j--)
                if($part[$j] > 0)
                    $s_part = ($j||$i+$j<$point-1 ? $s_numbert[$part[$j]] : $s_number[$part[$j]]).
                              $s_weights[strlen($part)-$j-1].$s_part;
            if($s_part) $s_part .= $s_weightb[($point-$i-1)/4];
            $str = $s_part.$str;
            $part = "";
        }
    }
    if($minus) $str = $s_minus . $str;
    if($str == "") $str = $s_zero[0];
    if($has_point) $str .= $s_dot;

    // 소수부분을 마저 처리한다.
    // 0의 처리는: 유효자릿수의 0은 $s_zero[2], 아니면 $s_zero[1]을 사용함.
    $len = strlen($number);
    $flag = 0; // 이미 0이 아닌 숫자를 지났는가?
    for($i=$point+1;$i<$len;$i++)
        if($number[$i] == "0")
            $str .= ($flag ? $s_zero[2] : $s_zero[1]);
        else {
            $str .= $s_number[$number[$i]]; $flag = 1;
        }
    //echo $str;
    return $str;
}