我認爲這是作業,所以讓我試着把你推向正確的方向,而不是簡單地提供答案。
你必須從社會安全號碼中提取出生日期。通過以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日。
我跟着你,直到這一點: 「生日-1:0;?」 - 我沒有使用該運營商還沒有 - 我somehing錯的,我認爲這是inpossible聲明變量的一類 – Treelink 2012-02-26 02:01:55
@Treelink內使用:我已刪除的條件運算符。你可以在這裏讀到它:http://msdn.microsoft.com/en-us/library/ty67wk28(v=vs.100).aspx – 2012-02-26 02:06:34
其實我想我明白這個代碼 - 我滿腦子都是我 - 唐't知道 - 什麼,但我明白了,我想我可以重現 - 謝謝! :)(我真的不知道這是可以做到這樣的,我從來沒有工作過氣出在我自己的!) – Treelink 2012-02-26 02:09:32