public static IDCardClient ReadIDCardFrontSide(string data) { string patterIdCardNumber = @"[0-9]{9}"; string patternRegisterRecordNumber = @"[0-9]{13}"; string patternDate = @"[0-9]{8}"; int indexFind = -1; int lengthFind = 0; IDCardClient client = new IDCardClient(); Regex regexNoise = new Regex(patternNoise); data = regexNoise.Replace(data, ""); regexNoise = new Regex(patternCoretNoise); data = regexNoise.Replace(data, "|"); data = DigitParser.Parse(data); MatchCollection matchesDate = new Regex(patternDate).Matches(data); var tuple = SelectCorrectDateAndIndexes(matchesDate, DateType.BirthDate); if (tuple.date != null) { client.BirthDate = tuple.date; data = data.Remove(tuple.indexFind, tuple.lengthFind); } MatchCollection matchesCardsValidEnds = new Regex(patternDate).Matches(data); tuple = SelectCorrectDateAndIndexes(matchesCardsValidEnds, DateType.DateCardsValidEnds); if (tuple.date != null) { client.DateCardsValidEnds = tuple.date; data = data.Remove(tuple.indexFind, tuple.lengthFind); } MatchCollection matchesRegisterRecordNumber = new Regex(patternRegisterRecordNumber).Matches(data); if (matchesRegisterRecordNumber.Count > 0) { client.RegisterRecordNumber = matchesRegisterRecordNumber[0].Value.Insert(8, "-"); indexFind = matchesRegisterRecordNumber[0].Index; lengthFind = client.RegisterRecordNumber.Length; data = data.Remove(indexFind, lengthFind); } MatchCollection matchesIdCardNumber = new Regex(patterIdCardNumber, RegexOptions.RightToLeft).Matches(data); if (matchesIdCardNumber.Count > 0) { client.IdCardNumber = matchesIdCardNumber[0].Value; indexFind = matchesIdCardNumber[0].Index; lengthFind = client.IdCardNumber.Length; data = data.Remove(indexFind, lengthFind); } return(client); }
public static IDCardClient ReadIDCardBackSide(string data) { IDCardClient client = new IDCardClient(); Regex regexNoise = new Regex(patternNoise); data = regexNoise.Replace(data, ""); regexNoise = new Regex(patternCoretNoise); data = regexNoise.Replace(data, "|"); Console.WriteLine($"data = {data}"); string info = ""; string mrz = ""; int indexStartMRZ = -1; foreach (var i in mrzStart) { indexStartMRZ = data.IndexOf(i); if (indexStartMRZ != -1) { break; } } int indexFinishMRZ = data.LastIndexOf("<<"); if (indexStartMRZ > -1 && indexFinishMRZ > -1) { info = data.Substring(0, indexStartMRZ); mrz = data.Substring(indexStartMRZ, indexFinishMRZ - indexStartMRZ); } else if (indexStartMRZ > -1) { info = data.Substring(0, indexStartMRZ); mrz = ""; } else if (indexFinishMRZ > -1) { info = data.Substring(0, indexFinishMRZ - 60); mrz = data.Substring(indexFinishMRZ - 60, indexFinishMRZ); } client = MRZParser.Parse(mrz); var dictionary = ReadOtherInfoFromIDCardBackSide(info); string date = dictionary[$"{nameof(client.PassportDeliveryDate)}"]; if (date != string.Empty) { client.PassportDeliveryDate = Convert.ToDateTime(dictionary[$"{nameof(client.PassportDeliveryDate)}"]); } else { client.PassportDeliveryDate = null; } client.PassportDeliveryBy = dictionary[$"{nameof(client.PassportDeliveryBy)}"]; client.ClientInn = dictionary[$"{nameof(client.ClientInn)}"]; return(client); }
public static IDCardClient Parse(string mrz) { IDCardClient client = new IDCardClient(); if (mrz.Length > 50) { mrz = mrz.Replace("\r\n", ""); string mrzClean = mrz; try { mrzClean = CheckErrors(mrz); } catch (Exception) { } client.ClientSex = GetClientSex(mrzClean); client.ClientFirstName = GetClientFirstName(mrzClean); client.ClientLastName = GetClientLastName(mrzClean); client.BirthDate = GetBirthDate(mrzClean); client.DateCardsValidEnds = GetDateCardsValidEnds(mrzClean); client.RegisterRecordNumber = GetRegisterRecordNumber(mrzClean); client.IdCardNumber = GetIdCardNumber(mrzClean); } return(client); }