首页 > 编程语言 >2025年最新退休年龄计算 | C# | .net core

2025年最新退休年龄计算 | C# | .net core

时间:2024-09-27 10:46:13浏览次数:9  
标签:core months C# gender retire 2025 int employee type

using System;
using RetireUtility;

namespace ConsoleApp1
{
    internal class Program
    {
        public static void Main(string[] args)
        {
            //参照 https://mp.weixin.qq.com/s/wqFAOhfNhfwMJKaQEE5lYQ 进行测试

            var r1 = Retire.CalcNewRetireDate("AAABBB19760503CC1C", employee_type.male_all);
            Console.WriteLine();

            Retire.CalcNewRetireDate("1976-05-03", gender.female, employee_type.female_manage);
            Console.WriteLine();

            Retire.CalcNewRetireDate(1976, 5, 3, gender.female, employee_type.female_operation);
            Console.ReadLine();
        }
    }
}

  

using System;

namespace RetireUtility
{
    public enum gender
    {
        male,
        female
    }
    public enum employee_type
    {
        male_all,
        female_manage,
        female_operation
    }
    public struct retire_result
    {
        public DateTime birthday { get; set; }
        public gender gender { get; set; }
        public employee_type employee_type { get; set; }
        public string retire_age { get; set; }
        public DateTime retire_date { get; set; }
        public int delay_months { get; set; }
        public string least_pay_months { get; set; }
    }
    public class Retire
    {
        public static retire_result CalcNewRetireDate(string birthday, gender gender, employee_type employee_type)
        {
            int gender_flag = gender == gender.male ? 1 : 0;
            string birthday_str = Convert.ToDateTime(birthday).ToString("yyyyMMdd");
            string sfz = $"AAABBB{birthday_str}CC{gender_flag}D";
            return CalcNewRetireDate(sfz, employee_type);
        }
        public static retire_result CalcNewRetireDate(int year, int month, int day, gender gender, employee_type employee_type)
        {
            int gender_flag = gender == gender.male ? 1 : 0;
            string birthday_str = new DateTime(year, month, day).ToString("yyyyMMdd");
            string sfz = $"AAABBB{birthday_str}CC{gender_flag}D";
            return CalcNewRetireDate(sfz, employee_type);
        }
        public static retire_result CalcNewRetireDate(string sfz, employee_type employee_type)
        {
            int year = int.Parse(sfz.Substring(6, 4));
            int month = int.Parse(sfz.Substring(10, 2));
            int day = int.Parse(sfz.Substring(12, 2));
            gender gender = int.Parse(sfz.Substring(16, 1)) % 2 == 0 ? gender.female : gender.male;
            DateTime birthday = new DateTime(year, month, day);

            int retire_delay_months = 0;
            int retire_original_months = 0;

            if (gender == gender.male) //男 60
            {
                retire_original_months = 12 * 60;
                if (year >= 1965)
                {
                    int over_months = 12 * (year - 1965) + (month - 0);
                    retire_delay_months = 1 * (((over_months - 1) / 4) + 1);
                    retire_delay_months = retire_delay_months > 36 ? 36 : retire_delay_months;
                }
            }
            else if (gender == gender.female && employee_type == employee_type.female_manage) //女 管理 55
            {
                retire_original_months = 12 * 55;
                if (year >= 1970)
                {
                    int over_months = 12 * (year - 1970) + (month - 0);
                    retire_delay_months = 1 * (((over_months - 1) / 4) + 1);
                    retire_delay_months = retire_delay_months > 36 ? 36 : retire_delay_months;
                }
            }
            else if (gender == gender.female && employee_type == employee_type.female_operation) //女 操作 50
            {
                retire_original_months = 12 * 50;
                if (year >= 1975)
                {
                    int over_months = 12 * (year - 1975) + (month - 0);
                    retire_delay_months = 1 * (((over_months - 1) / 2) + 1);
                    retire_delay_months = retire_delay_months > 60 ? 60 : retire_delay_months;
                }
            }

            int total_work_months = retire_original_months + retire_delay_months;
            DateTime retire_date = birthday.AddMonths(total_work_months);

            //计算“当年最低缴费年限”
            int least_pay_months = 12 * 15;
            int retire_year = retire_date.Year;
            if (retire_year >= 2030 && retire_year <= 2039)
            {
                least_pay_months += 6 * ((retire_year - 2030) + 1);
            }
            else if (retire_year > 2039)
            {
                least_pay_months = 12 * 20;
            }

            string retire_age = $"{total_work_months / 12}岁{total_work_months % 12}个月";
            string least_pay_months_str = $"{least_pay_months / 12}年{least_pay_months % 12}个月";

            Console.WriteLine($"性别\t\t\t{gender.ToString()}\r\n" +
                $"类别\t\t\t{employee_type.ToString()}\r\n" +
                $"出生时间\t\t{year}年{month}月\r\n" +
                $"改革后法定退休年龄\t{retire_age}\r\n" +
                $"改革后退休时间\t\t{retire_date.ToString("yyyy年M月")}\r\n" +
                $"延迟月数\t\t{retire_delay_months}\r\n" +
                $"当年最低缴费年限\t{least_pay_months_str}");

            var result = new retire_result
            {
                birthday = birthday,
                gender = gender,
                employee_type = employee_type,
                delay_months = retire_delay_months,
                retire_age = retire_age,
                retire_date = retire_date,
                least_pay_months = least_pay_months_str
            };
            return result;
        }
    }
}

  

标签:core,months,C#,gender,retire,2025,int,employee,type
From: https://www.cnblogs.com/laozuan/p/18435232

相关文章

  • Spring Cloud全解析:服务调用之OpenFeign日志打印
    OpenFeign日志打印OpenFeign提供了日志打印功能,可以配置不同级别的日志级别publicenumLevel{//默认,不显示任何日志NONE,//仅记录请求方法、url、响应状态码及执行时间BASIC,//除记录BASIC信息外,还记录请求头和响应头HEADERS,//除了HEADERS信息外,还有请......
  • 给PbootCMS增加个换行格式化标签br=1
    在PBootCMS中,如果你想在模板中使用换行符并使其在前端正确显示,可以通过自定义解析器来实现。具体步骤如下:步骤1:新增多行文本字段登录后台:进入PBootCMS后台管理系统。编辑模型:选择需要编辑的模型,点击“编辑”按钮。新增字段:在模型编辑页面,新增一个多行文本字段,用于存放简介......
  • pbootcms:未检测到您服务器环境的sqlite3数据库扩展
    当遇到PBootCMS提示“未检测到您服务器环境的sqlite3数据库扩展”的错误时,可以通过以下两种方法来解决:第一种方法:把数据库配置连接驱动改为 pdo_sqlite打开数据库配置文件找到 database.php 文件,通常位于 \APPs\config\ 目录下。修改数据库配置将 type 的......
  • 【TES817】l基于XCZU19EG FPGA的高性能实时信号处理平台
    板卡概述TES817是一款基于ZU19EGFPGA的高性能实时信号处理平台,该平台采用1片高性能的FPGA:XCZU19EG-2FFVC1760I作为主处理器,FPGA的PL端外挂1组72位DDR4SDRAM,用来实现超大容量数据缓存,FPGA的PS端外挂1组72位的DDR4SDRAM的高速数据缓存,用来支持操作系统的运行。该平台支持2个FMC......
  • PbootCms模板当列表页只有一页的时候不显示分页的小技巧
    在PBootCMS中,如果希望在列表页只有一页时隐藏分页条,可以通过条件判断来实现。具体步骤如下:步骤1:判断总页数获取总页数:使用 {page:count} 获取总页数。判断总页数:当总页数大于1时显示分页条。详细解释判断总页数使用 {pboot:if('[page:count]'>1)} 判断总......
  • pbootcms在内容详情页时{pboot:pageurl}和{content:link}​标签的用法
    在PBootCMS中,标签的使用非常灵活,可以帮助你在不同页面中获取所需的链接和其他信息。以下是关于 {pboot:pageurl} 和 {content:link} 标签的具体用法和区别:{pboot:pageurl} 标签用途获取当前页面的完整路径链接:包括域名在内的完整URL。用法适用于任意页面:可以在全......
  • Docker-入门
    Docker:Docker是用Go语音开发,在软件系统上做到资源的隔离,不像虚拟机会将整套系统复制,其虚拟机本身的运行就占据了实体机的部分性能.而Docker的资源隔离则不会,在Docker中跑资源和在物理机上跑资源基本相似。Docker环境依赖:Docker只能在基于linux系统运行的环境中,在windows中使用......
  • ifream跟webview 嵌套orchard core的登录
    orchardcore默认的安全策略很高。所以要设置后台要开启ocrs跟安全program.cs要配置cookie可以跨域。`builder.Services.ConfigureApplicationCookie(options=>{options.Cookie.SameSite=SameSiteMode.None;options.Cookie.SecurePolicy=......
  • 常见css属性方法
    上下拉动滚动条时卡顿、慢body{-webkit-overflow-scrolling:touch;overflow-scrolling:touch;}禁止复制、选中文本Element{-webkit-user-select:none;-moz-user-select:none;-khtml-user-select:none;user-select:none;}判断是否......
  • JavaScript null和0和undefined的比较
    null和0和undefined的比较alert(null>0); //(1)falsealert(null==0);//(2)falsealert(null>=0);//(3)true注意:这是因为相等性检查 == 和普通比较符 ><>=<= 的代码逻辑是相互独立的。进行值的比较时,null 会被转化为数字,因此它被转化为了 0。这就是为......