根据社会保障号码计算年龄-如何计算

本文关键字:计算 何计算 社会保障 号码 | 更新日期: 2023-09-27 18:25:53

我对C#还很陌生,接受了这个任务。我有一个叫人的班级,里面有一些详细信息,其中一个是社会保障号码。根据这个数字,我需要计算出这个人的年龄。根据任务,如果我理解正确的话,它需要适合这个:

public class Person
{
    int _Cpr;
    public int Age
    {
        get
        {
            return (age calculation from cpr number somehow)
        }
    }
}

然而,我不知道如何做到这一点——我想我需要将形式为DDMMYYYXXXX的社会保障号码整数与当前日期进行比较,并返回四舍五入年份的差值——但我不知道该怎么做。


我开始了解如何计算年龄——我仍然不知道的是,如何将其融入我的代码中。我的描述说Age应该是一个"计算属性"-但据我所知,我无法创建变量在类定义中使用,所以我真的无法完成将Cpr转换为Age所需的所有步骤-我可以吗?

根据社会保障号码计算年龄-如何计算

我认为这是家庭作业,所以让我试着把你推向正确的方向,而不是简单地提供答案。

你必须从社会保险号码中提取出生日期。通过用10的幂进行整数除法,你可以从右边"砍掉"数字。通过进行10次幂的模运算,您可以保持所需的位数:

123456/100 = 1234
1234%100 = 34

在C#中,您可以使用DateTime类来表示时间点(例如出生日期)。字段DateTime.Now包含当前时间。

您希望获得以年为单位的年龄(四舍五入),这样您就可以减去两个DateTime值的Year属性。你还必须考虑到这个人今年是否已经过生日了。


前方扰流板

最大的CPR是3112999999,这个数字实际上大于Int32.MaxValue。这意味着您必须将_Cpr的类型更改为uint(或long)。下面的代码还考虑了TheKaneda描述的从两位数年份中获得四位数年份的规则。

public class Person       
{       
  uint _Cpr;       
  public int Age       
  {       
    get       
    {       
      int century = (int) ((cpr/1000)%10);
      int shortBirthYear = (int) ((cpr/10000)%100);
      int birthYear = 1900 + shortBirthYear;
      if ((century == 4 || century == 9) && shortBirthYear <= 36)
        birthYear += 100;
      else if (5 <= century && century <= 8 && shortBirthYear <= 57)
        birthYear += 100;
      int birthMonth = (int) ((cpr/1000000)%100);
      int birthDayOfMonth = (int) ((cpr/100000000));
      DateTime birthDate = new DateTime(birthYear, birthMonth, birthDayOfMonth);
      DateTime today = DateTime.Now.Date;
      DateTime birthDay = new DateTime(today.Year, birthMonth, birthDayOfMonth);
      int birthdayAdjustment = today < birthDay ? -1 : 0;
      int age = today.Year - birthDate.Year + birthdayAdjustment;
    }
  }
}

尽管代码非常复杂,但它无法处理2月29日出生的人的情况。为了改进代码,应该将其重构为单独的部分,处理提取出生日期和计算年龄的问题。最后一部分应该讨论2月29日的问题,根据文化的不同,你可能会发现在非闰年,2月29号出生的人会在2月28日庆祝生日。

除了其他人写的内容外,请注意,理想情况下(为了生产使用,尽管您的作业可能不需要),您需要检查第7位数字以说明出生世纪。

ddmmyy-Cxxx
C = 0-3 => person was born in the 1900's
C = 4 or 9 => person was born either 2000-2036 or 1937-1999
C = 5-8 => person was born either 2000-2057 or 1858-1899

检查System.DateTime并转换.ToDateTime()

我相信你可以从那里得到它。

我不会给你所需的确切代码,因为这看起来像是家庭作业,但我会给你一些线索。

首先,格式为DDMMYYYXXXX的CPR数字看起来像int,但实际上它不是一。您可以将其视为具有4个不同字段(D、M、Y、X)的结构或字符串。不过,也许最方便的可以从随后的提示中推断出来。

您可以使用ToString(字符串格式)方法将.Net中由DateTime结构表示的日期转换为字符串,在该方法中您可以指定自定义格式。您可以使用ParseExact方法执行相反的操作。

现在,如果你过生日,计算年龄应该很容易。如果我们在这一年的生日之后,它等于当前年份和出生年份之间的差异,否则就少一个。实施它应该不会太困难。