Fun Centre

UK Income Tax Calculator 2025/26

Scroll to Top
document.addEventListener('DOMContentLoaded', function () { const root = document.getElementById('income-tax-calculator'); if (!root) return; // safe on other pages // Inputs const salaryEl = document.getElementById('salary'); const taxCodeEl = document.getElementById('taxCode'); const pensionValueEl = document.getElementById('pensionValue'); const pensionTypeEl = document.getElementById('pensionType'); const niEl = document.getElementById('ni'); const loanEl = document.getElementById('loan'); const scotEl = document.getElementById('scotland'); // Result cards const basicDiv = document.getElementById('basicRateDiv'); const higherDiv = document.getElementById('higherRateDiv'); const addDiv = document.getElementById('additionalRateDiv'); const netDiv = document.getElementById('netIncomeDiv'); // Details const taxDetails = document.getElementById('taxDetails'); const detailsContent = document.getElementById('detailsContent'); const fmt = (n) => '£' + Math.round(n).toLocaleString(); // Personal allowance from tax code + taper after £100k function getPersonalAllowance(income, taxCode) { let pa = 12570; const m = (taxCode || '').match(/\d+/); if (m) pa = parseInt(m[0], 10) * 10; if (income > 100000) { pa = Math.max(0, pa - Math.floor((income - 100000) / 2)); } return pa; } function parsePension(val, salary) { if (!val) return 0; const v = parseFloat(val) || 0; return pensionTypeEl.value === 'percent' ? (salary * v) / 100 : v; } function calculateTax() { const salary = +salaryEl.value || 0; const taxCode = taxCodeEl.value.trim(); const pension = parsePension(pensionValueEl.value, salary); const ni = +niEl.value || 0; const loan = +loanEl.value || 0; const scotland = scotEl.checked; const personalAllowance = getPersonalAllowance(salary, taxCode); const taxable = Math.max(0, salary - personalAllowance - pension); let basic = 0, higher = 0, additional = 0; const details = []; if (!scotland) { // England/Wales/Northern Ireland (simplified) const basicBand = 37700; const higherCutoffTaxable = Math.max(basicBand, (125140 - personalAllowance)); // where 45% kicks in if (taxable <= basicBand) { basic = taxable * 0.20; details.push(`£${taxable.toFixed(0)} at 20%`); } else if (taxable <= higherCutoffTaxable) { basic = basicBand * 0.20; higher = (taxable - basicBand) * 0.40; details.push(`£37700 at 20%`, `£${(taxable - basicBand).toFixed(0)} at 40%`); } else { basic = basicBand * 0.20; higher = Math.max(0, (higherCutoffTaxable - basicBand)) * 0.40; additional = (taxable - Math.max(basicBand, higherCutoffTaxable)) * 0.45; details.push( `£37700 at 20%`, `£${Math.max(0, higherCutoffTaxable - basicBand).toFixed(0)} at 40%`, `£${(taxable - Math.max(basicBand, higherCutoffTaxable)).toFixed(0)} at 45%` ); } } else { // Scotland (kept close to your original simple bands) if (taxable <= 20000) { basic = taxable * 0.20; details.push(`£${taxable.toFixed(0)} at 20%`); } else if (taxable <= 50000) { basic = 20000 * 0.20; higher = (taxable - 20000) * 0.21; details.push(`£20000 at 20%`, `£${(taxable - 20000).toFixed(0)} at 21%`); } else if (taxable <= 150000) { basic = 20000 * 0.20; higher = (50000 - 20000) * 0.21 + (taxable - 50000) * 0.41; details.push(`£20000 at 20%`, `£30000 at 21%`, `£${(taxable - 50000).toFixed(0)} at 41%`); } else { basic = 20000 * 0.20; higher = (50000 - 20000) * 0.21 + (150000 - 50000) * 0.41; additional = (taxable - 150000) * 0.46; details.push(`£20000 at 20%`, `£30000 at 21%`, `£100000 at 41%`, `£${(taxable - 150000).toFixed(0)} at 46%`); } } const totalTax = basic + higher + additional + ni + loan; const netIncome = salary - totalTax - pension; const monthlyNet = netIncome / 12; basicDiv.innerHTML = `
Basic Rate Tax
${fmt(basic)}
`; basicDiv.style.backgroundColor = '#b7f0a6'; higherDiv.innerHTML = `
Higher Rate Tax
${fmt(higher)}
`; higherDiv.style.backgroundColor = '#ffe7a3'; addDiv.innerHTML = `
Additional Rate Tax
${fmt(additional)}
`; addDiv.style.backgroundColor = '#ffb3b3'; netDiv.innerHTML = `
Net Income (after tax, NI, loan & pension)
${fmt(netIncome)}
Monthly take-home: ${fmt(monthlyNet)}
`; detailsContent.innerHTML = details.map(d => `
${d}
`).join(''); } // Events document.getElementById('calcBtn').addEventListener('click', calculateTax); document.getElementById('resetBtn').addEventListener('click', () => { salaryEl.value = 0; pensionValueEl.value = 0; pensionTypeEl.value = 'amount'; niEl.value = 0; loanEl.value = 0; scotEl.checked = false; calculateTax(); }); // Toggle details by clicking any tax card [basicDiv, higherDiv, addDiv].forEach(div => { div.addEventListener('click', () => { taxDetails.style.display = (taxDetails.style.display === 'none' || !taxDetails.style.display) ? 'block' : 'none'; }); }); // Initial render calculateTax(); });