public override ParsedNationalIdentifierData Parse(string nationalIdentifier) { ParsedNationalIdentifierData parsedObj = new ParsedNationalIdentifierData(); if (nationalIdentifier == null || !NationalIdentifierWhitelistValidator.IsMatch(nationalIdentifier)) { return(parsedObj); } // nationalIdentifier should contain the following format DDMMYYCZZZQ since it passed the Regex validation var birthYear = int.Parse(nationalIdentifier.Substring(4, 2)); var centuarySign = nationalIdentifier.Substring(6, 1)[0]; var yearhWithCentury = ExtractYearhWithCentury(birthYear, centuarySign); var month = int.Parse(nationalIdentifier.Substring(2, 2)); var day = int.Parse(nationalIdentifier.Substring(0, 2)); parsedObj.Valid = IsValidDate(yearhWithCentury, month, day) && HasValidControlDigit(nationalIdentifier); if (parsedObj.Valid) { var rollingId = nationalIdentifier.Substring(7, 3); parsedObj.Gender = int.Parse(rollingId) % 2 == 1 ? Gender.MALE : Gender.FEMALE; var birthday = new DateTime(yearhWithCentury, month, day); parsedObj.DateOfBirth = birthday; parsedObj.AgeInYears = GetAge(birthday); } return(parsedObj); }
public override ParsedNationalIdentifierData Parse(string nationalIdentifier) { ParsedNationalIdentifierData parsedObj = new ParsedNationalIdentifierData(); if (nationalIdentifier == null) { return(parsedObj); } var isTemporary = false; if (!NationalIdentifierWhitelistValidator.IsMatch(nationalIdentifier)) { if (!TemporaryNationalIdentifierWhitelistValidator.IsMatch(nationalIdentifier)) { return(parsedObj); } isTemporary = true; } // valueToCheck should have format: DDMMYYZZZQQ var valueToCheck = nationalIdentifier.Replace("-", string.Empty); var year = int.Parse(valueToCheck.Substring(4, 2)); var serialNumber = int.Parse(valueToCheck.Substring(6, 3)); var yearhWithCentury = ExtractYearhWithCentury(year, serialNumber); if (yearhWithCentury < 0) { return(parsedObj); } var month = int.Parse(valueToCheck.Substring(2, 2)); var day = int.Parse(valueToCheck.Substring(0, 2)); if (isTemporary) { day -= 40; // 40 is added to the day of temporary numbers so subtract away it } parsedObj.Valid = IsValidDate(yearhWithCentury, month, day) && HasValidControlDigits(valueToCheck); if (parsedObj.Valid) { //the last digit of the sequence number is odd for males and even for females. parsedObj.Gender = serialNumber % 2 == 1 ? Gender.MALE : Gender.FEMALE; var birthday = new DateTime(yearhWithCentury, month, day); parsedObj.DateOfBirth = birthday; parsedObj.AgeInYears = GetAge(birthday); } return(parsedObj); }
public override ParsedNationalIdentifierData Parse(string nationalIdentifier) { ParsedNationalIdentifierData parsedObj = new ParsedNationalIdentifierData(); if (nationalIdentifier == null) { return(parsedObj); } var isTemporary = false; if (!NationalIdentifierWhitelistValidator.IsMatch(nationalIdentifier)) { if (!TemporaryNationalIdentifierWhitelistValidator.IsMatch(nationalIdentifier)) { return(parsedObj); } isTemporary = true; } var hasPlusSign = nationalIdentifier.Contains("+"); var valueToCheck = nationalIdentifier.Replace("-", string.Empty).Replace("+", string.Empty); var yearhWithCentury = ExtractYearhWithCentury(valueToCheck, hasPlusSign); // Since we no longer need centuary information remove it if it existed if (valueToCheck.Length == 12) { valueToCheck = valueToCheck.Substring(2); } // valueToCheck should contain the following format YYMMDDNNNC var month = int.Parse(valueToCheck.Substring(2, 2)); var day = int.Parse(valueToCheck.Substring(4, 2)); if (isTemporary) { day -= 60; // 60 is added to the day of temporary numbers so subtract away it } // birthnumber even: female, odd: male parsedObj.Valid = IsValidDate(yearhWithCentury, month, day) && HasValidControlDigit(valueToCheck); if (parsedObj.Valid) { var rollingId = nationalIdentifier.Substring(nationalIdentifier.Length - 4); parsedObj.Gender = int.Parse(rollingId) % 2 == 1 ? Gender.MALE : Gender.FEMALE; var birthday = new DateTime(yearhWithCentury, month, day); parsedObj.DateOfBirth = birthday; parsedObj.AgeInYears = GetAge(birthday); } return(parsedObj); }
public override ParsedNationalIdentifierData Parse(string nationalIdentifier) { ParsedNationalIdentifierData parsedObj = new ParsedNationalIdentifierData(); parsedObj.Valid = IsValid(nationalIdentifier); if (parsedObj.Valid) { parsedObj.Gender = Gender.UNKNOWN; var valueToCheck = nationalIdentifier; // valueToCheck should contain the following format DD.MM.YYYY var day = int.Parse(valueToCheck.Substring(0, 2)); var month = int.Parse(valueToCheck.Substring(3, 2)); var yearhWithCentury = int.Parse(valueToCheck.Substring(6, 4)); var birthday = new DateTime(yearhWithCentury, month, day); parsedObj.DateOfBirth = birthday; parsedObj.AgeInYears = GetAge(birthday); } return(parsedObj); }