public ValidationResults ValidateMrzAndBaseData(PassportBaseData baseData, MrzLine2 mrzLine2) { ValidationResults results = new ValidationResults(); //Check digits against what was passed into mrzline2 results.PassportNumberCheckDigit = CheckDigitHelper.CalculateCheckDigit(mrzLine2.PassportNumber) == mrzLine2.CheckDigitPassportNumber ? true : false; results.DateOfBirthCheckDigit = CheckDigitHelper.CalculateCheckDigit(mrzLine2.DateOfBirth.ToString("yyMMdd")) == mrzLine2.CheckDigitDateOfBirth ? true : false; results.PassportExpirationDateCheckDigit = CheckDigitHelper.CalculateCheckDigit(mrzLine2.DateOfExpiry.ToString("yyMMdd")) == mrzLine2.CheckDigitDateOfExpiry ? true : false; results.PersonalNumberCheckDigit = CheckDigitHelper.CalculateCheckDigit(mrzLine2.PersonalNumber) == mrzLine2.CheckDigitPersonalNumber ? true : false; //Composite check digit is all fields on line 2 minus nationality and gender string compositeCheckDigit = mrzLine2.PassportNumber + mrzLine2.CheckDigitPassportNumber + mrzLine2.DateOfBirth.ToString("yyMMdd") + mrzLine2.CheckDigitDateOfBirth + mrzLine2.DateOfExpiry.ToString("yyMMdd") + mrzLine2.CheckDigitDateOfExpiry + mrzLine2.PersonalNumber + mrzLine2.CheckDigitPersonalNumber; results.FinalCheckDigit = CheckDigitHelper.CalculateCheckDigit(compositeCheckDigit) == mrzLine2.CheckDigitOverall ? true : false; //Do a cross check between what the user entered vs what's on mrzline2 results.GenderCrossCheck = baseData.Gender == mrzLine2.Gender ? true : false; results.DateOfBirthCrossCheck = baseData.DateOfBirth.ToString(DateMask) == mrzLine2.DateOfBirth.ToString(DateMask) ? true : false; results.ExpirationDateCrossCheck = baseData.DateOfExpiry.ToString(DateMask) == mrzLine2.DateOfExpiry.ToString(DateMask) ? true : false; results.NationalityCrossCheck = baseData.Nationality == mrzLine2.Nationality ? true : false; results.PassportNumberCrossCheck = baseData.PassportNumber.ZeroFillerChars() == mrzLine2.PassportNumber ? true : false; return(results); }
public ActionResult <ValidationResults> Validate([FromBody] PassportInput input) { //Map view model onto model PassportBaseData baseData = _mapper.Map <PassportBaseData>(input); try { //Get the Mrzline2 string into a manageable object MrzLine2 mrzLine2 = _parsemrzLine2.ParseMrzLine2FromString(input.MrzLine2); //Check all data on the mrzline2 and whether what the user entered matches the mrzline2 return(_mrzValidator.ValidateMrzAndBaseData(baseData, mrzLine2)); } catch (Exception e) { //Always return a bad status code with the exception to the view return(BadRequest(e)); } }