$in = '67567'; $carry = 126; $out = sprintf('%06d', substr($in, -3, 3, '') * 222 + $carry); while (length($in)) { substr($out, 0, 3, sprintf('%04d', substr($out, 0, 3) + substr($in, -1, 1, '') * 222 )); } $out =~ s/^0+//; print($out, "\n");