プロの力技

 昨年引き継いだ業務の一つに社内向けwebコンテンツの管理があって、そのサイトの中を覗いていて見つけたサブルーチン。

<?php

//==============================================================================
//    "000000"の文字列を加算する
//    引数:    000000の6文字数字形式
//    戻り値:000001のように加算された6文字数字の文字列
//==============================================================================

function add_member_code($work){

    $conp = $work;    // 000000
    // 一桁目を抜き出して加算
    $cnt = substr($conp,5,1);    // 00000#
    $cnt++;
    // 以下桁上がり処理の分岐
    if($cnt == 10){
        $cnt2 = substr($conp,4,1);    // 0000#0
        $cnt2++;                    // 桁上がりのため2桁目に1足す
        $conp = substr_replace($conp,"0",5,1);        // 繰り上がりの為、1桁目は0に確定
        if($cnt2 == 10){
            $cnt3 = substr($conp,3,1);    // 000#00
            $cnt3++;
            $conp = substr_replace($conp,"0",4,1);    // 繰り上がりの為、2桁目は0に確定
            if($cnt3 == 10){
                $cnt4 = substr($conp,2,1);    // 00#000
                $cnt4++;
                $conp = substr_replace($conp,"0",3,1);        // 繰り上がりの為、3桁目は0に確定
                if($cnt4 == 10){
                    $cnt5 = substr($conp,1,1);    // 0#0000
                    $cnt5++;
                    $conp = substr_replace($conp,"0",2,1);        // 繰り上がりの為、4桁目は0に確定
                    if($cnt5 == 10){
                        $cnt6 = substr($conp,0,1);    // #00000
                        $cnt6++;
                        $conp = substr_replace($conp,"0",1,1);        // 繰り上がりのため、5桁目は0に確定
                        $conp = substr_replace($conp,$cnt6,0,1);        // 6桁目は繰り上がりがないので確定
                    }else{
                        $conp = substr_replace($conp,$cnt5,1,1);    // 5桁目確定
                    }
                }else{
                    $conp = substr_replace($conp,$cnt4,2,1);    // 4桁目確定
                }
            }else{
                $conp = substr_replace($conp,$cnt3,3,1);    // 3桁目確定
            }
        }else{
            $conp = substr_replace($conp,$cnt2,4,1);        // 2桁目確定
        }
    }else{
        // 桁上がりがない場合、加算後の数字を置き換える
        $conp = substr_replace($conp,$cnt,5,1);                // 1桁目確定
    }
    return $conp;
}
?>

 これって

<?php
function add_member_code($work){
	$work++;
	return sprintf("%06s",$work);;
}
?>

 で済むんじゃないの?引数のフォーマットのチェックなんかやってないけど、それは元の関数でも同じだし。
 前任者はコンテンツの外見は見ていたけど、中身は見ていなかった。というか、それが正しい姿で、素人が手を出すとあとが大変なんだけど、このお仕事は、これに限らず、htmlでも必要以上に複雑化していて、ずいぶんとメンテナンス性が悪い。これがプロのお仕事かと思うけど、他のところに移行しにくくするという点ではまさにプロ的なのかも。
 ちなみにそこは超有名企業から分社化された会社。システムはグループ企業内でやっているもよう。