awk によるプログラム例ですが、 プログラムというより、 税法の解読例として理解してください。
素直に法律に従うのであれば、 コンピュータを使わないのが日本人としての義務ですが、 その義務に反してでも、使ってみようというのであれば、 ご自由に使っていただいてかまいません。 ただし、官僚国家==日本らしい、 「知らしむべからず、 よらしむべし」という根拠も示さない法律の解読ですから、 この計算が正しいという保証はありませんし、 数値は毎年変わりますので、注意が必要です。 (これは 2003 年版)
使いかたは、
function tax(m, h, t) .. 源泉所得税額を求める m = 社会保険料控除後の金額 (円) h = 扶養者数 (控除対象配偶者、扶養者の合計) t = 0: 甲欄, 1: 乙欄(2 箇所以上から給与をもらう人)です。
function tax(m, h, t, x) { if (t == 0) # 甲欄 x = tax_k(m - k_koujo(m) - h_koujyo(h)) else # 乙欄 x = tax_o(m, h) return x } # 給与所得控除の額 function k_koujo(m, x) { # 社会保険控除後の給与等の金額 if (m <= 135416) x = 54167 else if (m <= 149999) x = m * 0.40 else if (m <= 299999) x = m * 0.30 + 15000 else if (m <= 549999) x = m * 0.20 + 45000 else if (m <= 833333) x = m * 0.10 + 100000 else x = m * 0.05 + 141667 return int(x + 0.999999) # 給与所得控除の額 } # 配偶者・扶養親族・基礎控除 function h_koujyo(h) { # h = 扶養者数(控除対象配偶者を含む) return ++h * 31667 } # 税額 (月額表甲欄) function tax_k(m, x) { return int(tax0(m) / 10 + 0.5) * 10 } function tax0(m, x) { if (m < 0) x = 0 else if (m <= 275000) x = m * 0.08 else if (m <= 658334) x = m * 0.16 - 22000 else if (m <= 750000) x = m * 0.20 - 48334 else if (m <= 1500000) x = m * 0.30 - 123334 else x = m * 0.37 - 228334 return x } # 税額 (月額表乙欄) function tax_o(m, h, d, e, u, v, x, y) { if (m < 87000) x = int(m * 0.05) # 1 円未満切捨て else if (m <= 1130000) { if (m < 99000) { d = 1000 # 階差 e = 87000 # 最小値 } else if (m < 221000) { d = 2000 e = 99000 } else { d = 3000 e = 221000 } x = (m - e) - int(int((m - e) / d) * d) x = m - x y = x * 2.5 u = tax0(y - k_koujo(y) - 31667) y = x * 1.5 v = tax0(y - k_koujo(y) - 31667) x = int(int((u - v) / 100 + 0.5) * 100) # 10 円の桁で四捨五入 } else x = int((m - 1130000) * 0.35 + 392800) # 1 円未満切捨て return x - h * 2530 }'
Unix を始めたばかりというかたから、 賞与の源泉徴収表はどうするのか というご質問がありましたが、 これは、昔も今も、謎解きする元気が出ませんでした。