个人所得税计算器 在线工具核心JS实现

简介: 这是一款专注个税计算的JS工具,将累计预扣法、五险一金规则与税率表封装于核心类中。输入12个月收入及扣除配置,一键生成全年月度明细(含应纳税额、税后收入等),逻辑清晰、规则集中、易于扩展。

这篇只讲功能层 JavaScript 实现。这个工具的核心思路是:把税率规则、五险一金规则、累计预扣法放进一个计算类里,输入 12 个月收入和扣除配置后,一次产出整年的月度明细。

在线工具网址:https://see-tool.com/text-character-count
工具截图:
工具截图.png

1. 核心数据结构

计算器初始化时,先准备三类基础数据:

  • 累计预扣法税率表(含速算扣除数)
  • 城市社保/公积金缴费基数上下限
  • 每月减除费用(5000)
class IncomeTaxCalculator {
   
  constructor() {
   
    // 累计预扣税率区间
    this.taxBrackets = [
      {
    min: -1, max: 36000, rate: 0.03, deduction: 0 },
      {
    min: 36000, max: 144000, rate: 0.10, deduction: 2520 },
      {
    min: 144000, max: 300000, rate: 0.20, deduction: 16920 },
      {
    min: 300000, max: 420000, rate: 0.25, deduction: 31920 },
      {
    min: 420000, max: 660000, rate: 0.30, deduction: 52920 },
      {
    min: 660000, max: 960000, rate: 0.35, deduction: 85920 },
      {
    min: 960000, max: Infinity, rate: 0.45, deduction: 181920 }
    ]

    // 每月减除费用
    this.monthlyDeduction = 5000
  }
}

这一步把规则常量和计算逻辑解耦,后续计算函数不需要硬编码税率数字。

2. 月度五险一金计算

月度扣除支持三种基数来源:

  • 按月工资
  • 单一自定义基数
  • 养老/医疗/失业/公积金分别设置基数

关键点在“实际基数”处理:要同时受用户输入、封顶线、保底线、当月工资四个条件约束。

// 计算实际缴费基数
const getActualBase = (baseValue, capValue, floorValue, monthlyIncome) => {
   
  // 统一兜底,避免 NaN 和负数
  const safeBase = Math.max(0, baseValue || 0)
  const safeCap = Math.max(0, capValue || 0)
  const safeFloor = Math.max(0, floorValue || 0)

  // 先做上限约束:不能超过上限,也不能超过月薪
  let result = safeCap > 0
    ? Math.min(safeBase, safeCap, monthlyIncome)
    : Math.min(safeBase, monthlyIncome)

  // 再做下限约束
  if (safeFloor > 0) result = Math.max(result, safeFloor)

  return result
}

得到各项实际基数后,再乘对应费率得到养老、医疗、失业、公积金金额,并汇总 total。这一层输出会直接参与个税应纳税所得额计算。

3. 累计预扣税额计算

个税函数按“累计应纳税所得额”查税率区间并套公式:

calculateTaxForIncome(cumulativeIncome, cumulativeDeduction, cumulativeSpecialDeductions = 0) {
   
  // 累计应纳税所得额
  const taxableIncome = cumulativeIncome - cumulativeDeduction - cumulativeSpecialDeductions
  if (taxableIncome <= 0) return 0

  for (const bracket of this.taxBrackets) {
   
    if (taxableIncome > bracket.min && taxableIncome <= bracket.max) {
   
      return Math.max(0, taxableIncome * bracket.rate - bracket.deduction)
    }
  }

  // 兜底走最高档
  const highestBracket = this.taxBrackets[this.taxBrackets.length - 1]
  return Math.max(0, taxableIncome * highestBracket.rate - highestBracket.deduction)
}

这里返回的是“截至当前月的累计应纳税额”,不是当月税额。

4. 年度主流程:一次产出12个月明细

主流程会循环 12 次,每月做四件事:

  1. 计算当月五险一金
  2. 更新累计收入、累计专项扣除、累计附加扣除
  3. 计算累计应纳税额
  4. 反推当月税额并得到税后收入

核心公式是:

// 当月应纳税额 = 累计应纳税额 - 上月累计已纳税额
const monthlyTax = Math.max(0, cumulativeTaxAmount - cumulativeTax)

// 税后收入 = 税前收入 - 五险一金 - 当月个税
const afterTaxIncome = monthlyIncome - insurance.total - monthlyTax

每月结果会记录为结构化对象(收入、扣除、税额、税后、累计值等),最终返回一个 12 项数组,界面层可直接用于表格展示和汇总统计。

5. 工具方法

核心逻辑外还有两个实用方法:

  • 金额格式化:把数字转成带千分位、保留两位小数的货币字符串
  • 城市基数读取:按城市键返回对应的社保/公积金上下限配置

这两个方法让计算层对外输出更稳定,页面调用时不需要重复写格式化和城市映射逻辑。

整套实现的重点是“规则集中、计算分层、月度与累计并行维护”。这样既能保证个税计算口径一致,也方便后续扩展更多收入场景。

目录
相关文章
|
1月前
|
JavaScript 流计算
个人所得税计算器 在线工具分享
每月工资到手多少?个税怎么算?这款Vue开发的在线个税计算器,无需下载,输入税前工资、五险一金及专项附加扣除,秒算应纳税额与税后收入,助你谈薪、跳槽、预算更从容!
330 7
|
SQL 存储 JSON
MySQL执行请求报错 Error: Row size too large (>8126)
最近遇到一个业务问题,在执行一个大的业务查询时会抛出异常报错,所以今天就总结一下 Row size too large (>8126) 报错的相关问题。
|
Java 开发者 Docker
五种常用的 Spring Boot 热部署方式
【2月更文挑战第5天】
4767 0
五种常用的 Spring Boot 热部署方式
|
1月前
|
JavaScript
ASCII艺术字生成 在线工具分享
一款基于Vue开发的在线ASCII艺术字生成工具,无需安装,输入文字即可秒变个性艺术字。支持多字体、自定义宽度,适用于昵称、标题、文案等场景,操作极简,零门槛上手。
410 6
|
网络协议 安全 Linux
Tool之wget:wget的简介、安装、入门、使用方法之详细攻略(一)
Tool之wget:wget的简介、安装、入门、使用方法之详细攻略
Tool之wget:wget的简介、安装、入门、使用方法之详细攻略(一)
|
2月前
|
分布式计算 JavaScript 前端开发
MD5在线加密 核心JS实现
本工具基于纯JS实现MD5在线加密,支持文本/文件输入,统一转为字节序列后计算MD5。兼容text/base64/hex等多种格式解析,输出可选hex(含空格分隔)、base64及大小写切换,文件支持分片读取与进度显示。
515 1
|
3月前
|
安全 算法 项目管理
日期计算器在线工具分享
这是一款基于Vue3开发的免费在线日期计算器,支持日期加减、天数差值、工作日计算及星期查询。界面简洁、操作便捷、结果精准,所有计算均在本地完成,保障隐私安全,无需注册即可跨设备使用。
1139 4
日期计算器在线工具分享
|
8天前
|
数据可视化 JavaScript
在线Cron表达式生成器分享
专为新手设计的在线Cron生成器!无需死记`* / , -`等符号,3步可视化配置(选频率→填时间→复制表达式),实时生成可用规则。Vue2开发,支持5/6位格式提醒与时区提示,助你轻松搞定定时任务。
222 2
|
1月前
|
JavaScript 安全
短网址还原 在线工具分享
担心短链接藏风险?Vue开发的「短网址还原」在线工具,秒解真实地址、查看跳转路径、一键复制长链。无需安装,打开即用,助你安全查链、运营核验、资料整理更安心!
818 11
|
1月前
|
编解码 JavaScript
中文域名转码 在线工具分享
专为中文域名设计的在线转码工具!用Vue开发,无需安装,一键将中文域名与Punycode(xn--开头)互转。自动清理网址前缀,操作极简:输入→转换→复制。注册域名、配置网站、排查链接都好用!
1361 12

热门文章

最新文章