首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
宝塔
V2EX  ›  程序员

谁能把个税算法写成 代码

  •  
  •   frylkrttj · 297 天前 · 7461 次点击
    这是一个创建于 297 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看大家争论的激烈,我来出个题。谁把这个 个税算法写成权威的代码出来 push 到 github 上去以后全国适用。xx 改一次算法就 push 一次有什么难的。

    我坐等 V2EX 大叔亮代码,谁写的短又容易看懂,我想大家都会服气。

    不限制编程语言,各位尽情发挥。

    84 回复  |  直到 2019-01-24 19:06:00 +08:00
        1
    wdv2ly   297 天前   ♥ 5
    详细计算方法不是有文档吗,有什么难的

    https://oldrivers.cc/npit/index.html
        2
    frylkrttj   297 天前
    不弄成权威代码 push 出去 我看这事在 V2EX 三天一小吵,结果大家都没弄懂是怎么算得。我都看过好几个关于个税的帖子了。
        3
    FakeLeung   297 天前 via Android
    @wdv2ly 按照这个网页的来的话,我是增税了。。。。。
        4
    orangeade   297 天前 via Android
        5
    947211232   297 天前
    小姐姐你很活跃啊,最近天天都发帖。。。要简陋 ss 不,这样你就不用天天发了。。。
        6
    hualongbei   297 天前   ♥ 1
    @orangeade 你这个貌似和一楼的算法不一样,一楼的和我的工资表一致
        7
    frylkrttj   297 天前
    @947211232 害怕
        8
    947211232   297 天前
    @frylkrttj 哈哈哈,我也害怕小姐姐你比我还大 = =
        9
    frylkrttj   297 天前
    @947211232 亮代码
        10
    947211232   297 天前
    @frylkrttj 已经有现成的 web 计算器了,github 上也有代码,重点在于谁的更权威更官方
        11
    guog   297 天前 via Android
    @947211232 啥比你大你说清楚啊🐶🐶🐶
        12
    wemore   297 天前 via iPhone
    我司财务做了个 excel 输入工资可以看到税和税后工资(小声 bb:让你们财务也做个呗)
        13
    stuazt   297 天前
    这就跟你说:“谁写个小九九的代码来瞅瞅呗”是一个效果的,没人做是因为。。。完全没有技术含量,尤其是还有速算扣除数这种简化算法用来计算这个很基本的分段函数的情况下。。。
        14
    Spatherbst   297 天前
    <!doctype html>
    <html>

    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <meta name="keywords" content="2019 个税,2019 新版个税计算器" />
    <meta name="description" content="2019 新版个税计算器,可计算每月个税。" />
    <title>2019 年个税计算器</title>
    <style type="text/css">
    body {
    font-size: 13px;
    }

    input {
    height: 15px;
    width: 126px;
    line-height: 15px;
    padding: 1px;
    font-size: 13px;
    }

    #head {
    font-size: 14px
    }

    #line input {
    width: 50px;
    }

    .error {
    color: red;
    }

    .detail {
    font-size: 12px
    }
    </style>
    </head>

    <body>
    <h1>2019 年个税计算器</h1>
    <table id="head">
    <tr>
    <th>税前工资</th>
    <td><input id="gz" value="30000" /> 元 /月 <span class="error" style="display: none;">请输入工资,且必须大于 5000 元~</span></td>
    </tr>
    <tr>
    <th>五险一金</th>
    <td><input id="wxyj" value="3000" /> 元 /月</td>
    </tr>
    <tr>
    <th>专项扣除</th>
    <td><input id="zxkc" value="3000" /> 元 /月</td>
    </tr>
    <tr>
    <td colspan=2 style="text-align: center;">
    <button onclick="startWork()" style="width: 80%; margin-top: 10px;">开始计算</button> 
    </td>
    </tr>
    </table>

    <br />每月扣税(可调整各项额度)
    <hr />

    <table id="line"></table>

    <br />扣税详情
    <hr />
    <div id="detail"></div>

    <script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.1.min.js"></script>
    <script type="text/javascript">
    startWork();
    $(window).bind('keypress', function (event) {
    if (event.keyCode == "13") {
    startWork();
    }
    })

    function startWork() {
    var gz = $("#gz").val();
    if (!gz || gz < 5000) {
    $(".error").show();
    return;
    }
    $(".error").hide();


    var wxyj = $("#wxyj").val() || 0;
    var zxkc = $("#zxkc").val() || 0;
    var html = '<tr class="title_line"><th>月份</th><th>税前工资</th><th>五险一金</th><th>专项扣除</th><th>个税</th><th>到手工资</th></tr>';
    for (var i = 1; i <= 12; i++) {
    html += '<tr id="line1">' +
    '<td>' + i + '月</td>' +
    '<td><input onchange="startCore()" id="gz' + i + '" value="' + gz + '" /></td>' +
    '<td><input onchange="startCore()" id="wxyj' + i + '" value="' + wxyj + '" /></td>' +
    '<td><input onchange="startCore()" id="zxkc' + i + '" value="' + zxkc + '" /></td>' +
    '<td id="gs' + i + '"></td>' +
    '<td id="dsgs' + i + '"></td>' +
    '</tr>';
    }
    html += "<tr><td id='hj' colspan=6></td></tr>";
    $("#line").html(html);
    startCore();
    }

    function startCore() {
    var gsTotal = 0;
    var dsgzTotal = 0;
    var detail = "";
    for (var i = 1; i <= 12; i++) {
    var gz = $("#gz" + i).val();
    var wxyj = $("#wxyj" + i).val() || 0;
    var zxkc = $("#zxkc" + i).val() || 0;
    var gsed = gz * i - 5000 * i - wxyj * i - zxkc * i;
    var rule = getRule(gsed);
    var gs = Math.round(gsed * rule[0] - rule[1] - gsTotal);
    $("#gs" + i).html("<strong>" + gs + "</strong>元");
    $("#dsgs" + i).html("<strong>" + (gz - wxyj - gs) + "</strong>元");

    detail += "<div>" + i + "月 (" + gz + "*" + i + " - 5000*" + i + " - " + wxyj + "*" + i + " - " + zxkc + "*" + i + ")*" + rule[0] + " - " + rule[1] + " - " + gsTotal + " = <strong>" + gs + "</strong>元</div>";
    gsTotal += gs;
    dsgzTotal += (gz - wxyj - gs);
    $("#hj").html("<table><tr><td><strong>  个税合计:" + gsTotal + "元</strong></td><td><strong>   个税平均:" + Math.round(gsTotal / 12) + "元 /月</strong></td></tr><tr><td><strong>到手工资合计:" + dsgzTotal + "元</strong></td><td><strong> 到手工资平均:" + Math.round(dsgzTotal / 12) + "元 /月</strong></td></tr></table>");
    }

    $("#detail").html(detail);
    }

    function getRule(gsed) {
    if (gsed <= 36000) {
    return [0.03, 0];
    }
    if (gsed <= 144000) {
    return [0.1, 2520];
    }
    if (gsed <= 300000) {
    return [0.2, 16920];
    }
    if (gsed <= 420000) {
    return [0.25, 31920];
    }
    if (gsed <= 660000) {
    return [0.3, 52920];
    }
    if (gsed <= 960000) {
    return [0.35, 85920];
    }
    if (gsed > 960000) {
    return [0.45, 181920];
    }
    }
    </script>
    </body>
    </html>
        15
    580a388da131   297 天前 via iPhone
    编程真的要数学。。。
        16
    murmur   297 天前
    你写了没用的 每个省都有自己的 APP
        17
    frylkrttj   297 天前
    @murmur #16 你这意思是说每个省算法都不一样吗?
        18
    airfling   297 天前
    public static void main(String[] args) {
    //每月工资
    double wages = 13000;
    //专项扣除,没有的改为 0
    double special = 2000D;
    //起始线
    double base = 5000D;
    //总税
    double allTax = 0D;
    //每月税收
    double monthTax = 0D;
    //总工资
    double allWages = wages * 12;
    for (int i = 1; i <= 12; i++) {
    double tmp = (wages - base - special) * i;
    if (tmp < 36000) {
    monthTax = tmp * 0.03 - allTax;
    }
    if (36000 <= tmp && tmp < 144000) {
    monthTax = tmp * 0.1 - allTax - 2520;
    }
    if (144000 <= tmp && tmp < 300000) {
    monthTax = tmp * 0.2 - allTax - 16920;
    }
    if (300000 <= tmp && tmp < 420000) {
    monthTax = tmp * 0.25 - allTax - 31920;
    }
    if (420000 <= tmp && tmp < 660000) {
    monthTax = tmp * 0.3 - allTax - 52920;
    }
    if (660000 <= tmp && tmp < 960000) {
    monthTax = tmp * 0.35 - allTax - 85920;
    }
    if (tmp >= 960000) {
    monthTax = tmp * 0.45 - allTax - 181920;
    }
    allTax += monthTax;
    System.out.printf("当前%d 月份的税收为%.2f,当月剩余工资为%.2f\r\n", i, monthTax, wages - monthTax);
    }
    System.out.println("今年总工资为" + allWages + ",今年总税额度为" + allTax);
    System.exit(0);
    }
        19
    frylkrttj   297 天前
    @airfling #18 不知道是什么语言
        20
    frylkrttj   297 天前
    #18 看着像 c 但感觉从没见过这样的 c
        21
    airfling   297 天前
    @frylkrttj java,语言种类不重要,解决问题就行
        22
    RoyL   297 天前
    @frylkrttj
    一眼不就知道是 java 了....你来骗分的?
        23
    huluhulu   297 天前 via iPhone
    @frylkrttj 是的,每个城市的社保基数和公积金不一样
        24
    frylkrttj   297 天前
    @RoyL #22 学习了,我从来没见过 java 的代码,不认识,现在认识了。
        25
    frylkrttj   297 天前
    @huluhulu 缴税一定要买社保吗?如果一定要那不是强买强卖吗?
        26
    adminsam   297 天前 via Android   ♥ 2
    沉贴好好上学吧…这是大人的事情
        27
    frylkrttj   297 天前
    @huluhulu 修正#25:缴税一定要买社保跟公积金吗?如果一定要那不是强买强卖吗?
        28
    huluhulu   297 天前 via iPhone
    @frylkrttj 不是的,个人可以不交。但是绝大多数上班族的税前工资包含这两项。这两项支出不需要缴纳个税,需要扣除。
        29
    frylkrttj   297 天前
    #28 原来扣除是 来自社保跟公积金这些 。
        30
    passerbytiny   296 天前
    难道在代码的权威性上,以及有可能出现的哪种语言的代码更牛逼上,讨论不比现在更激烈?
        31
    frylkrttj   296 天前
    @huluhulu 不对不对,如果有买社保公积金就享受扣除,那比如外面街头开店的那些不买社保公积金,缴税没有享受扣除。那结果不等于比前面的人多缴了,结果等于还是买了吧。
        32
    RBill   296 天前 via Android
    应该是每改一次算法开一个分支,把以前的算法留着
        33
    Raisu   296 天前
    绝对赞成,那些讨论和新闻看得我头疼
        34
    huluhulu   296 天前 via iPhone
    @frylkrttj 社保和公积金是独立于起征点扣除和专项扣除的。但是他的点比较高,一般相当于税前工资的 20%左右。比个税交的点高多了。自由工作者怎么交就看自己权衡了。
        35
    Muniesa   296 天前 via Android
    虽然楼主 ID 不好记,但是我知道我每天都能见到楼主的帖子……
        36
    sdijeenx   296 天前
    如果不考虑新税法第一、二、四、五、七、八、九至十六、十八至二十二条的话,这不就是分段函数编程题么?所以这是 LZ 学校留的作业自己写不出来所以上 V2 问答案吧。大家都别发代码,给它提示就好了=3=
        37
    Bryan0Z   296 天前 via Android
    @frylkrttj Java 都没见过了嘛
        38
    linora   296 天前
    占位
        39
    adminsam   296 天前
    发现 [《感觉“就差一个程序员了”其实不是个笑话》]( https://www.v2ex.com/t/528677#reply76) 这贴出自楼主,我就菊花一紧
        40
    frylkrttj   296 天前
    我想自己写一个但不知道怎么算,那些扣除什么的不知道怎么来的,所以问问清除。
        41
    CoderGeek   296 天前
    = = github 上有的 不过个人情况不一样
        42
    yukiww233   296 天前
    @frylkrttj #25 缴纳社保是强制规定,先好好读书再来灌水不好么
        43
    amwyyyy   296 天前
    1 楼的非常精准
        45
    DovaKeen   296 天前
    这也许可以开发个小程序什么的,感觉上会有很多人用啊,而且还能搜集一下用户的收入信息。
        46
    asyqm   296 天前
    @frylkrttj 缴纳社保是“义务”,不是你想不交就不交的。你说的没错,就是强买强卖,要不然你退休了谁给你发工资?你病了去医院谁给你掏医保部分?
    你说的那些开店的,第一你知道他们不交社保吗?第二你听说过谁不缴纳社保只交个税吗?干脆直接告诉社保中心(未来是税务局)你逃避社保义务呗。。。
        47
    frylkrttj   296 天前
    @asyqm 社保不就是一个保险种类的产品吗,哪来的义务。被强交的都是公司上班的吧,外面自己开店做小买卖的会交这些?再说也不是每个人都指望国家养老。

    再说还有其他商业保险,我用的是我爸的电话,隔几天都能收到平安的推销保险的短信。
        48
    frylkrttj   296 天前
    @asyqm 缴税可以理解,有收入就交没收入就不交。

    强交社保我就想不同了,而且听说社保是要不能断的。但每个人收入会断啊,比如一个人有收入的时候交了一段时间的社保,后面开始没收入了。那还拿什么交社保,不交完多少年老了又领不到钱。
        49
    frylkrttj   296 天前
    根据百度出来的结果我仔细看了下,保险法是强制企业为职工买的。也就是说如果你不是职工不在强制范围内。

    https://zhidao.baidu.com/question/302691889.html
        50
    asyqm   296 天前
    @frylkrttj 制度就是制度。对于你有能力缴纳公积金的,一定是单位工作,那给你上社保就是公司义务,相应的对你来说就是义务。外面开店做小买卖的,可以以个体户或者自由职业身份缴纳,当然此时是自愿的,取决于你希不希望“拿退休金”以及去医院有“医保待遇”。要知道,有资格“退休”,60/65 岁之后才有资格继续享受“医保”

    社保不能断是部分城市在其他行为时增加的一些限制行为,比如北京买房买车要求连续 5 年的不中断社保记录,并不是社保本身的规定。社保关于养老金的要求为累计缴纳满 15 年即可有养老金的资格。缴纳越久,养老金相应越高。

    中断社保两种情况,一种是你说的,无业,没钱交,那让你交你也交不了啊。你的问题毫无意义。
    一种是你还有追求,还打算有下一份工作,不想中断,那就以个人名义自己去社保中心交。以保证社保的连续性。

    另外,别拿社保和商业保险比,一个是社会保障制度,一个是盈利性赚钱的玩意,能比么?社保缴纳是有上限的,你自己算算每个月交多少钱社保,算算每年自己开销多少医疗费,预估一下到 60 岁退休大概,然后 60 岁到 XX 岁的退休金,以及每年的医疗报销。再回头看看哪个保险或者理财的回报率有这么高。

    不知道你现在的年龄多大,看你对社保还需要百度查,应该毕业不久。那你对自己工作 15 年都没有信心,我只能表示无语。

    我说的都是“正常情况”,请不要拿特殊情况来争论。这个世界上不是只有黑和白。
        51
    asyqm   296 天前
    @frylkrttj 别看现在你总听谁说不指望国家养老。等到 60 岁,真正能财务自由,搞定未来 20-30 年生活医疗开销,我相信,绝不是大部分群体。绝大多数人,还是要靠国家社保每月发的几千块工资和医疗保险来生活的。
        52
    frylkrttj   296 天前
    @asyqm 假设一个人 23 岁参加工作 一路漂泊 累计交满 15 年社保,此时 40 岁。又要等到 60 岁才能享受社保养老 ? 那中间还有 20 年不是白交了?
        53
    azuis   296 天前
    @frylkrttj 有个人账户呀。个人账户里的钱都是你的。15 年只是有和没有的分界点。之后继续交理论上退休金也越高。
        54
    LxRuzx   296 天前
    推荐使用美团 app 我的 最下面有一个 新个税计算 就可以直接计算
        55
    qce7   296 天前
    @wdv2ly 你这个前六个月和我的一毛一样,但是后六个月每个月多了 350,怎么回事
        56
    shm7   296 天前
    其实只要有了应税额,那么算是很简单的,我算过。

    问题就在应税额每个公司、城市因为操作手法不同都不同。
        57
    kakudesu   296 天前
    @frylkrttj #52 然后 59 岁的时候'先帝创业未半而中道崩殂'
        58
    frylkrttj   296 天前
    @shm7 #56 我只听过税率,应税额 怕是故意弄出来搞晕人的吧。
        59
    laike9m   296 天前
    @asyqm 其实吧,到那时候大概率是发不出来的。我个人的看法是先交着可以,但一定要做好国家不发钱的准备。
        60
    asyqm   296 天前
    @frylkrttj 交的越多,退休拿的越多。如果我没记错,医保也是有缴纳年限要求的好像。按你说的,40 岁到 60 岁,你都不工作,且你也没按个人缴纳,那也没交钱啊,你白交啥了?如果你工作了,或者以个人名义交了,那到退休就会增加你拿的钱的啊。。。

    没理解你的逻辑
        61
    asyqm   296 天前
    @laike9m 新人新办法,老人老办法。再说,PRC 有啥拿不出来的?你没看东北的社保基金已经空了么?但是你听说耽误谁发养老金了?
        62
    asyqm   296 天前
    @frylkrttj 没有应税额光有税率是个什么鬼? 应纳税额=应税额(简单来说就是税前工资减去各种扣除)*税率
        63
    frylkrttj   296 天前
    难道不应该是:

    if ( 收入> 起征点){
    pintf ("所缴=收入*税率")
    }
    else {
    pintf ("低收入人群不符合纳税条件")
    }
        64
    frylkrttj   296 天前
    修正#63+加扣除项:

    难道不应该是:

    if ( 收入> 起征点){
    pintf ("所缴=(收入-起征点)*税率 - 扣除项")
    }
    else {
    pintf ("低收入人群不符合纳税条件")
    }
        65
    laike9m   296 天前
    @asyqm 希望二十年后我们也可以这么自信
        66
    asyqm   296 天前
    @frylkrttj 应税额=(应税收入-起征点-扣除项)*税率-速算扣除数
    扣除项不可能是税后减的。
        67
    asyqm   296 天前
    @laike9m 我对 TG 领导的 PRC 有信心。中国好歹经济还没负增长吧?为啥就没信心了?而且假如你是大公司码农,基本已经在全国富裕的 10%阶层之内了,别太妄自菲薄了……
        68
    shm7   296 天前 via iPhone
    @frylkrttj 嘛勒。老哥你还是了解下基本的扣除理念再来想想怎么写吧。应税额是需要交税的额度,工资-各种社保公积金今年的辅助扣除来的;我司能给到这个应税额,和交了多少税。
    恐怕 v2ers 前几天的争吵都是不去看看章程、文档,就来大肆撕逼的吧。

    我无 fuck 说。
        69
    shm7   296 天前 via iPhone
    @asyqm 应税额不是你这么算的,你这已经是税额了。应税额是要交税的那部分工资。

    新的税务体系不需要速算扣除什么,有了应税额,每个月就可以累计;累计低于 36000,按每个月工资*税率 3%; else 累计低于 144000,按 10%的比率交。
        70
    shm7   296 天前 via iPhone
    如上,基本就是一个累积应税额的 loop,小学生都会写的程序。真不明白都在吵什么。
        71
    frylkrttj   296 天前
    #70 @shm7 说的轻巧小学生都会写的 V2EX 大叔会被搞的 隔三天发个帖来吵的面红耳赤的?

    别 bb 亮你权威代码来说话。不然这事我看要从年头吵到年尾了,××改一次算法又来开贴吵。
        72
    FrankHB   296 天前
    @asyqm 你该问问 PRC 官员为什么自己对经济增长率下降那么紧张。
    另外部分地区的实际数据嘛……
        73
    asyqm   296 天前
    @FrankHB 不用某些地区,很多地区都……哈哈哈。经济下降是正常,但是不能过快,会影响稳定……
        74
    asyqm   296 天前
    @shm7 你说的跟我说的有啥差异吗?不都是工资减去社保公积金免税各种额度么???
    顶多就差在没有速算扣除上呗?
        75
    frylkrttj   296 天前
    @asyqm 不亮代码说话,扯皮的走开。
        76
    asyqm   296 天前
    @frylkrttj 不是程序员的都不能说话了?怎么就叫扯皮了?
        77
    atonku   296 天前
    不够起征点的路过
        78
    luozhsky   295 天前
    http://owncloud.goubuli.online/index.php/s/ZFRvYPwH8LkRpFT/download

    @wemore 我做的 excel 计算的。。。加了个调薪变税的按钮。。。
        79
    shm7   295 天前
    @frylkrttj 所以说,作为一个程序员,还会被这种问题吵的面红耳赤,还有一大波所谓程序员来看热闹,却连基本税收规则都搞不清的。我真是觉得叫我程序员简直是在贬低我。
        80
    shm7   295 天前
    作为贴主,发这种帖子,连税收基本规则都搞不懂,我真的觉得你可能真的搞不清楚程序是个什么东西。你的这种啥都不懂,就叫人家来写程序,这分明是搞不懂什么叫开源。这么个不算难的问题,一大波人讨论,我不得不说 lz 的组织能力真是堪忧,讨论半天还就是相互撕逼。

    其实我只是好心点进来给个 hint,以往都是有感谢的;看来以后碰到这样的帖子,应该还是直接回避掉了。不谢。不再回复。

    @all 是个程序员,就先好好了解下我们收税的计算方式,再来想着怎么算;规则都不懂,写的不论是什么代码,都只可能是错的。
        81
    luozhsky   295 天前   ♥ 1
    @shm7 老哥心态放松。我研究规则下来实际上还是有速算扣除数这东西的。。在计算单月还是年终校验(跳槽之后如果不提供之前交税记录的话会,新公司是从 0 计算的,年底需要自行校验申报补缴)的时候都会用到。。你可以看看我那个表格。。还有年中调薪(跳槽)和扣减的纳税计算方式。。
        82
    frylkrttj   295 天前
    @luozhsky #81 听你这么一说感觉以后程序员跳槽翻几倍工资的路要没了。新公司怕是要求职者提供交税记录了。
        83
    luozhsky   295 天前
    @frylkrttj 原来不也要提供工资流水么..交税记录正常情况下新公司是查不到的(我老婆是会计和我说的)..
        84
    udumbara   295 天前
    @wdv2ly 老哥那计税金额取整的逻辑是啥 发现和你计算的会有小数点后的金额差距
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1989 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 30ms · UTC 01:17 · PVG 09:17 · LAX 17:17 · JFK 20:17
    ♥ Do have faith in what you're doing.