Required Minimum Distribution (RMD) Calculator
ANA›Life Services Authority›National Calculator Authority›Required Minimum Distribution (RMD) Calculator
.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }
Required Minimum Distribution (RMD) Calculator
Calculate the IRS-mandated minimum amount you must withdraw annually from your traditional IRA, 401(k), or other tax-deferred retirement accounts once you reach the required beginning date.
Account Balance as of December 31 of Prior Year ($)
Your Age as of December 31 of This Year
IRS Life Expectancy Table
Uniform Lifetime Table (most account owners) Joint Life & Last Survivor Table (spouse >10 yrs younger & sole beneficiary) Single Life Expectancy Table (inherited IRAs / beneficiaries)
Spouse's Age as of December 31 of This Year
Expected Annual Account Growth Rate (%) (optional, for multi-year projection)
Projection Years (1–20)
Calculate RMD
// ── IRS Uniform Lifetime Table (2022 final regulations, ages 72–120) ── const REQ_UNIFORM = { 72:27.4, 73:26.5, 74:25.5, 75:24.6, 76:23.7, 77:22.9, 78:22.0, 79:21.1, 80:20.2, 81:19.4, 82:18.5, 83:17.7, 84:16.8, 85:16.0, 86:15.2, 87:14.4, 88:13.7, 89:12.9, 90:12.2, 91:11.5, 92:10.8, 93:10.1, 94:9.5, 95:8.9, 96:8.4, 97:7.8, 98:7.3, 99:6.8, 100:6.4, 101:6.0, 102:5.6, 103:5.2, 104:4.9, 105:4.6, 106:4.3, 107:4.1, 108:3.9, 109:3.7, 110:3.5, 111:3.4, 112:3.3, 113:3.1, 114:3.0, 115:2.9, 116:2.8, 117:2.7, 118:2.5, 119:2.3, 120:2.0 };
// ── IRS Single Life Expectancy Table (2022 final regulations, ages 0–111+) ── const REQ_SINGLE = { 0:84.6, 1:83.7, 2:82.8, 3:81.8, 4:80.8, 5:79.8, 6:78.8, 7:77.9, 8:76.9, 9:75.9, 10:74.9, 11:73.9, 12:72.9, 13:71.9, 14:70.9, 15:69.9, 16:68.9, 17:67.9, 18:66.9, 19:65.9, 20:64.9, 21:63.9, 22:62.9, 23:61.9, 24:60.9, 25:59.9, 26:58.9, 27:57.9, 28:56.9, 29:55.9, 30:54.9, 31:53.9, 32:52.9, 33:51.9, 34:50.9, 35:49.9, 36:48.9, 37:47.9, 38:46.9, 39:45.9, 40:44.9, 41:43.9, 42:42.9, 43:41.9, 44:40.9, 45:39.9, 46:38.9, 47:37.9, 48:36.9, 49:35.9, 50:34.9, 51:33.9, 52:32.9, 53:31.9, 54:30.9, 55:29.9, 56:28.9, 57:27.9, 58:26.9, 59:25.9, 60:24.9, 61:23.9, 62:22.9, 63:21.9, 64:20.9, 65:19.9, 66:19.0, 67:18.0, 68:17.0, 69:16.1, 70:15.2, 71:14.3, 72:13.4, 73:12.5, 74:11.7, 75:10.9, 76:10.1, 77:9.3, 78:8.6, 79:7.9, 80:7.3, 81:6.7, 82:6.1, 83:5.6, 84:5.1, 85:4.6, 86:4.2, 87:3.8, 88:3.4, 89:3.1, 90:2.8, 91:2.5, 92:2.3, 93:2.1, 94:1.9, 95:1.8, 96:1.6, 97:1.5, 98:1.4, 99:1.3, 100:1.2, 101:1.1, 102:1.0, 103:1.0, 104:1.0, 105:1.0, 106:1.0, 107:1.0, 108:1.0, 109:1.0, 110:1.0, 111:1.0 };
// ── IRS Joint Life & Last Survivor Table (2022) — owner age (rows) vs spouse age (cols) ── // Stored as [ownerAge][spouseAge] for ages 70–120 owner, 40–120 spouse (subset for practicality) // Full table excerpt — key age combinations function reqJointFactor(ownerAge, spouseAge) { // Simplified: use the IRS formula approximation for joint life factor // Actual IRS table values for common combinations const jointTable = { 70:{40:48.0,45:43.0,50:38.1,55:33.4,56:32.5,57:31.6,58:30.7,59:29.8,60:28.9,61:28.1,62:27.2,63:26.4,64:25.6,65:24.8,66:24.0,67:23.3,68:22.6,69:21.9,70:21.2,71:20.6,72:20.0,73:19.4,74:18.9,75:18.4,76:17.9,77:17.4,78:17.0,79:16.6,80:16.2}, 71:{40:48.0,45:43.0,50:38.1,55:33.4,56:32.5,57:31.6,58:30.7,59:29.8,60:28.9,61:28.0,62:27.2,63:26.3,64:25.5,65:24.7,66:23.9,67:23.2,68:22.5,69:21.8,70:21.1,71:20.5,72:19.9,73:19.3,74:18.7,75:18.2,76:17.7,77:17.3,78:16.8,79:16.4,80:16.0}, 72:{40:48.0,45:43.0,50:38.1,55:33.4,56:32.5,57:31.6,58:30.7,59:29.8,60:28.9,61:28.0,62:27.1,63:26.3,64:25.4,65:24.6,66:23.8,67:23.1,68:22.4,69:21.7,70:21.0,71:20.4,72:19.7,73:19.1,74:18.6,75:18.0,76:17.5,77:17.1,78:16.6,79:16.2,80:15.8}, 73:{40:48.0,45:43.0,50:38.1,55:33.4,56:32.5,57:31.6,58:30.7,59:29.8,60:28.8,61:27.9,62:27.1,63:26.2,64:25.4,65:24.5,66:23.7,67:23.0,68:22.2,69:21.5,70:20.9,71:20.2,72:19.6,73:19.0,74:18.4,75:17.9,76:17.4,77:16.9,78:16.4,79:16.0,80:15.6}, 74:{40:48.0,45:43.0,50:38.1,55:33.4,56:32.5,57:31.6,58:30.7,59:29.7,60:28.8,61:27.9,62:27.0,63:26.1,64:25.3,65:24.4,66:23.6,67:22.9,68:22.1,69:21.4,70:20.7,71:20.1,72:19.4,73:18.8,74:18.2,75:17.7,76:17.2,77:16.7,78:16.2,79:15.8,80:15.4}, 75:{40:48.0,45:43.0,50:38.1,55:33.3,56:32.4,57:31.5,58:30.6,59:29.7,60:28.7,61:27.8,62:26.9,63:26.1,64:25.2,65:24.3,66:23.5,67:22.7,68:22.0,69:21.3,70:20.6,71:19.9,72:19.3,73:18.7,74:18.1,75:17.5,76:17.0,77:16.5,78:16.0,79:15.6,80:15.2}, 76:{40:48.0,45:43.0,50:38.0,55:33.3,56:32.4,57:31.5,58:30.5,59:29.6,60:28.7,61:27.7,62:26.8,63:26.0,64:25.1,65:24.2,66:23.4,67:22.6,68:21.8,69:21.1,70:20.4,71:19.8,72:19.1,73:18.5,74:17.9,75:17.3,76:16.8,77:16.3,78:15.8,79:15.4,80:15.0}, 77:{40:48.0,45:43.0,50:38.0,55:33.3,56:32.3,57:31.4,58:30.5,59:29.5,60:28.6,61:27.7,62:26.8,63:25.9,64:25.0,65:24.1,66:23.3,67:22.5,68:21.7,69:21.0,70:20.3,71:19.6,72:19.0,73:18.3,74:17.7,75:17.2,76:16.6,77:16.1,78:15.6,79:15.2,80:14.8}, 78:{40:48.0,45:43.0,50:38.0,55:33.2,56:32.3,57:31.3,58:30.4,59:29.5,60:28.5,61:27.6,62:26.7,63:25.8,64:24.9,65:24.0,66:23.2,67:22.4,68:21.6,69:20.8,70:20.1,71:19.5,72:18.8,73:18.2,74:17.6,75:17.0,76:16.4,77:15.9,78:15.4,79:15.0,80:14.6}, 79:{40:48.0,45:43.0,50:38.0,55:33.2,56:32.2,57:31.3,58:30.3,59:29.4,60:28.4,61:27.5,62:26.6,63:25.7,64:24.8,65:23.9,66:23.1,67:22.2,68:21.5,69:20.7,70:20.0,71:19.3,72:18.7,73:18.0,74:17.4,75:16.8,76:16.3,77:15.7,78:15.2,79:14.8,80:14.4}, 80:{40:48.0,45:43.0,50:38.0,55:33.1,56:32.2,57:31.2,58:30.3,59:29.3,60:28.4,61:27.4,62:26.5,63:25.6,64:24.7,65:23.8,66:22.9,67:22.1,68:21.3,69:20.6,70:19.8,71:19.2,72:18.5,73:17.9,74:17.2,75:16.7,76:16.1,77:15.6,78:15.1,79:14.6,80:14.2}, 81:{40:48.0,45:43.0,50:38.0,55:33.1,56:32.1,57:31.2,58:30.2,59:29.2,60:28.3,61:27.3,62:26.4,63:25.5,64:24.6,65:23.7,66:22.8,67:22.0,68:21.2,69:20.4,70:19.7,71:19.0,72:18.3,73:17.7,74:17.1,75:16.5,76:15.9,77:15.4,78:14.9,79:14.4,80:14.0}, 82:{40:48.0,45:43.0,50:38.0,55:33.1,56:32.1,57:31.1,58:30.1,59:29.2,60:28.2,61:27.2,62:26.3,63:25.4,64:24.5,65:23.6,66:22.7,67:21.9,68:21.1,69:20.3,70:19.6,71:18.9,72:18.2,73:17.5,74:16.9,75:16.3,76:15.8,77:15.2,78:14.7,79:14.3,80:13.8}, 83:{40:48.0,45:43.0,50:38.0,55:33.0,56:32.0,57:31.1,58:30.1,59:29.1,60:28.1,61:27.2,62:26.2,63:25.3,64:24.4,65:23.5,66:22.6,67:21.8,68:21.0,69:20.2,70:19.4,71:18.7,72:18.0,73:17.4,74:16.8,75:16.2,76:15.6,77:15.1,78:14.6,79:14.1,80:13.7}, 84:{40:48.0,45:43.0,50:38.0,55:33.0,56:32.0,57:31.0,58:30.0,59:29.0,60:28.1,61:27.1,62:26.1,63:25.2,64:24.3,65:23.4,66:22.5,67:21.7,68:20.8,69:20.1,70:19.3,71:18.6,72:17.9,73:17.2,74:16.6,75:16.0,76:15.5,77:14.9,78:14.4,79:13.9,80:13.5}, 85:{40:48.0,45:43.0,50:38.0,55:33.0,56:32.0,57:31.0,58:30.0,59:29.0,60:28.0,61:27.0,62:26.1,63:25.1,64:24.2,65:23.3,66:22.4,67:21.5,68:20.7,69:19.9,70:19.2,71:18.5,72:17.8,73:17.1,74:16.5,75:15.9,76:15.3,77:14.8,78:14.3,79:13.8,80:13.3} };
const ownerKey = Math.min(Math.max(Math.round(ownerAge), 70), 85); const spouseKey = Math.min(Math.max(Math.round(spouseAge), 40), 80);
if (jointTable[ownerKey] && jointTable[ownerKey][spouseKey] !== undefined) { return jointTable[ownerKey][spouseKey]; } // Fallback: if owner > 85, use uniform table (IRS allows this) return REQ_UNIFORM[Math.min(ownerAge, 120)] || 2.0; }
function reqGetFactor(table, ownerAge, spouseAge) { ownerAge = Math.round(ownerAge); if (table === "uniform") { const age = Math.min(Math.max(ownerAge, 72), 120); return REQ_UNIFORM[age] || 2.0; } else if (table === "single") { const age = Math.min(Math.max(ownerAge, 0), 111); return REQ_SINGLE[age] || 1.0; } else if (table === "joint") { return reqJointFactor(ownerAge, spouseAge); } return null; }
function reqFmt(n) { return n.toLocaleString("en-US", {style:"currency", currency:"USD", minimumFractionDigits:2, maximumFractionDigits:2}); }
function reqShowSpouseField() { const table = document.getElementById("req-table").value; document.getElementById("req-spouse-age-group").style.display = (table === "joint") ? "block" : "none"; } document.getElementById("req-table").addEventListener("change", reqShowSpouseField);
function reqCalc() { const balance = parseFloat(document.getElementById("req-balance").value); const age = parseFloat(document.getElementById("req-age").value); const table = document.getElementById("req-table").value; const spouseAge = parseFloat(document.getElementById("req-spouse-age").value) || 0; const growth = parseFloat(document.getElementById("req-growth").value) || 0; const years = parseInt(document.getElementById("req-years").value) || 1; const resultDiv = document.getElementById("req-result");
// ── Validation ── if (isNaN(balance) || balance 120) { resultDiv.style.display = "block"; resultDiv.innerHTML = 'Age must be between 73 and 120. RMDs begin at age 73 (SECURE 2.0 Act).
'; return; } if (table === "joint") { if (isNaN(spouseAge) || spouseAge 120) { resultDiv.style.display = "block"; resultDiv.innerHTML = 'Please enter a valid spouse age (1–120) for the Joint Life table.
'; return; } if (age - spouseAge 20) { resultDiv.style.display = "block"; resultDiv.innerHTML = 'Projection years must be between 1 and 20.
'; return; }
// ── Current Year RMD ── const factor = reqGetFactor(table, age, spouseAge); const rmd = balance / factor; const rate = growth / 100;
// ── Multi-Year Projection ── let rows = ""; let runBalance = balance; let runAge = age; let runSpouse = spouseAge;
for (let y = 0; y ${y === 0 ? "Current Year" : "Year " + (y + 1)} ${Math.round(runAge)} ${reqFmt(runBalance)} ${f.toFixed(1)} ${reqFmt(r)} ${((r / runBalance) * 100).toFixed(2)}% ${reqFmt(end)} `; runBalance = end; runAge++; runSpouse++; }
- const tableLabel = table === "uniform" ? "Uniform Lifetime Table"
- table === "joint" ? "Joint Life & Last Survivor Table"
- "Single Life Expectancy Table";
resultDiv.style.display = "block"; resultDiv.innerHTML = ` ### RMD Results
Current Year RMD ${reqFmt(rmd)}
Life Expectancy Factor ${factor.toFixed(1)} years
Withdrawal Rate ${((rmd / balance) * 100).toFixed(2)}%
Table Used ${tableLabel}
#### Multi-Year RMD Projection (${growth > 0 ? growth + "% annual growth" : "no growth assumed"})
Period Age Starting Balance IRS Factor RMD Amount Withdrawal % Year-End Balance
${rows}
Deadline: First RMD must be taken by April 1 of the year after you turn 73; all subsequent RMDs by December 31 each year. Failure to take the full RMD results in a 25% excise tax on the shortfall (reduced to 10% if corrected within 2 years).
`; }
#### Formula
RMD = Prior Year-End Account Balance ÷ IRS Life Expectancy Factor
- Prior Year-End Balance: Fair market value of all applicable accounts as of December 31 of the preceding year.
- Life Expectancy Factor: Obtained from the applicable IRS table based on your age (and spouse's age for the Joint table).
- Year-End Balance (projection): (Starting Balance − RMD) × (1 + Growth Rate)
- Withdrawal Rate: RMD ÷ Starting Balance × 100
#### Assumptions & References
- The SECURE 2.0 Act (2022) raised the RMD starting age to 73 (for those born 1951–1959) and 75 (for those born 1960 or later, effective 2033).
- Life expectancy factors are from the IRS 2022 Final Regulations (effective January 1, 2022), published in Treasury Regulation §1.401(a)(9).
- Uniform Lifetime Table: Used by most account owners regardless of beneficiary designation.
- Joint Life & Last Survivor Table: Used only when the sole beneficiary is a spouse more than 10 years younger; yields a lower RMD.
- Single Life Expectancy Table: Used by eligible designated beneficiaries (e.g., surviving spouses, minor children) who inherited an IRA.
- Roth IRAs are not subject to RMDs during the original owner's lifetime.
- The penalty for missing an RMD is 25% of the shortfall (reduced to 10% if corrected within the 2-year correction window) per IRC §4974.
More Calculators
- New York Sales Tax Calculator for Contractor Services
- North Carolina Contractor License Fee Calculator
- Commercial Project Permit Cost Estimator
- NC Contractor Continuing Education Hours Tracker
- NC Contractor Bond & Insurance Cost Estimator
- NYC Contractor License Fee Calculator
Read Next
Nc Contractor Continuing Education Hours Tracker ANA › Life Services Authority › National Calculator Authority › NC Contractor Continuing Education Hours Tracker...
Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...