gpt4 book ai didi

c# - 从社会安全号码计算年龄 - 如何?

转载 作者:太空宇宙 更新时间:2023-11-03 20:27:46 31 4
gpt4 key购买 nike

我是 C# 的新手,接受了这项任务。我有一个名为 person 的类,其中包含一些详细信息,其中一个是社会安全号码(CPR 号码)。从这个数字我需要计算这个人的年龄。根据作业,如果我理解正确的话,它需要适合这个:

public class Person
{
int _Cpr;

public int Age
{
get
{
return (age calculation from cpr number somehow)
}
}
}

但是我不知道该怎么做 - 我猜我需要比较具有这种形式的社会安全号码整数:DDMMYYXXXX 与当前日期,并返回四舍五入年份的差异 - 但我不知道怎么做。


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

最佳答案

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

您必须从社会安全号码中提取出生日期。通过 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 日庆祝他们的生日。

关于c# - 从社会安全号码计算年龄 - 如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9449680/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com