DEV Community

toolzip
toolzip

Posted on Originally published at toolzip.app

How Income Tax Works in Korea — Building a Take-Home Pay Calculator

How Income Tax Works in Korea — Building a Take-Home Pay Calculator

Most salary calculators in Korea just give you a number. Here's how to build one that shows the full breakdown — and why the math is more complex than it looks.

The Four Social Insurance Deductions

Korean employers deduct four mandatory contributions from gross salary:

Insurance Employee Rate (2024)
National Pension 4.5%
Health Insurance 3.545%
Long-term Care 12.95% of health premium
Employment Insurance 0.9%
function calculateInsurance(monthlyGross) {
  const pension = monthlyGross * 0.045;
  const health = monthlyGross * 0.03545;
  const ltc = health * 0.1295;
  const employment = monthlyGross * 0.009;

  return { pension, health, ltc, employment };
}
Enter fullscreen mode Exit fullscreen mode

Income Tax — The Simplified Table Method

Korea uses simplified withholding tax tables (간이세액표) for monthly payroll. The exact amount depends on:

  1. Monthly taxable income (gross minus non-taxable items)
  2. Number of dependents

Rather than implementing the full progressive tax brackets, payroll systems use pre-computed tables. For a calculator, the bracket approach is more transparent:

const TAX_BRACKETS = [
  { limit: 14_000_000,  rate: 0.06, deduction: 0 },
  { limit: 50_000_000,  rate: 0.15, deduction: 1_260_000 },
  { limit: 88_000_000,  rate: 0.24, deduction: 5_760_000 },
  { limit: 150_000_000, rate: 0.35, deduction: 15_440_000 },
  { limit: 300_000_000, rate: 0.38, deduction: 19_940_000 },
  { limit: 500_000_000, rate: 0.40, deduction: 25_940_000 },
  { limit: 1_000_000_000, rate: 0.42, deduction: 35_940_000 },
  { limit: Infinity,    rate: 0.45, deduction: 65_940_000 },
];

function calculateIncomeTax(annualTaxable, dependents) {
  const bracket = TAX_BRACKETS.find(b => annualTaxable <= b.limit);
  const annualTax = annualTaxable * bracket.rate - bracket.deduction;
  const dependentDeduction = 1_500_000 * dependents;
  const finalTax = Math.max(0, annualTax - dependentDeduction);
  return finalTax / 12; // Monthly
}
Enter fullscreen mode Exit fullscreen mode

Local Income Tax

Local income tax (지방소득세) is simply 10% of the national income tax:

const localTax = incomeTax * 0.1;
Enter fullscreen mode Exit fullscreen mode

Putting It Together

function calculateTakeHome(annualSalary, dependents = 1) {
  const monthly = annualSalary / 12;
  const insurance = calculateInsurance(monthly);
  const totalInsurance = Object.values(insurance).reduce((a, b) => a + b, 0);

  const annualTaxable = annualSalary - totalInsurance * 12;
  const incomeTax = calculateIncomeTax(annualTaxable, dependents);
  const localTax = incomeTax * 0.1;

  const totalDeductions = totalInsurance + incomeTax + localTax;
  const takeHome = monthly - totalDeductions;

  return { monthly, takeHome, totalDeductions, insurance, incomeTax, localTax };
}
Enter fullscreen mode Exit fullscreen mode

Calculate your take-home pay at toolzip.app/tools/salary-calculator.

Top comments (1)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.