async private void LoadJson()
        {
            // ReadData IdCard
            using (System.IO.StreamReader r = new System.IO.StreamReader("mockData\\passport_mock.json"))
            {
                passportModelJson = new PassportModel();
                var json      = r.ReadToEnd();
                var jsonModel = JsonConvert.DeserializeObject <PassportModel>(json);
                if (jsonModel != null)
                {
                    jsonModelEncode   = encodeData(JsonConvert.SerializeObject(jsonModel));
                    passportModelJson = jsonModel;
                }
            }

            using (System.IO.StreamReader r = new System.IO.StreamReader("mockData\\passport_mock_image.json"))
            {
                jsonPassportImage = new PassportImage();
                var image       = r.ReadToEnd();
                var jsonConvert = JsonConvert.DeserializeObject <PassportImage>(image);
                Debug.WriteLine(jsonConvert);
                jsonPassportImage = jsonConvert;
            }
            await WaitFormAsync(2000);

            ReturnMessageToClient();
            await WaitFormAsync(1000);

            CloseForm();
        }
Exemple #2
0
        public PassportModel GetPassportData(string passportNumber)
        {
            var passportModel = new PassportModel();

            using (var con = new SqlConnection(Helper.GetConnectionString()))
            {
                con.Open();
                var query = "SELECT * FROM PassportData WHERE PassportNumber = @passportNumber";
                using (var cmd = new SqlCommand(query, con))
                {
                    cmd.Parameters.Add("@passportNumber", System.Data.SqlDbType.VarChar).Value = passportNumber;

                    var reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        passportModel.Id             = (long)reader[nameof(PassportModel.Id)];
                        passportModel.FirstName      = reader[nameof(PassportModel.FirstName)].ToString();
                        passportModel.LastName       = reader[nameof(PassportModel.LastName)].ToString();
                        passportModel.DateOfBirth    = (DateTime)reader[nameof(PassportModel.DateOfBirth)];
                        passportModel.PassportNumber = reader[nameof(PassportModel.PassportNumber)].ToString();
                        passportModel.Sex            = (bool)reader[nameof(PassportModel.Sex)];
                    }
                }
            }
            return(passportModel);
        }
        public async Task <Message <PassportModel> > ValidatePassport(PassportModel model, string endPoint)
        {
            var requestUrl =
                CreateRequestUri(string.Format(System.Globalization.CultureInfo.InvariantCulture, endPoint));

            return(await PostAsync <PassportModel>(requestUrl, model));
        }
Exemple #4
0
 private void TriggerHandleMrzResult(PassportModel result)
 {
     if (OnHandleMrzResult != null && result != null)
     {
         OnHandleMrzResult(result);
     }
 }
        public Guid Register(PassportModel model)
        {
            var passport = _passportSearchRepository.GetPassportByName(model.UserName);

            if (passport != null)
            {
                return(Guid.Empty);
            }
            SubscriberEntity subscriber = new SubscriberEntity
            {
                Id         = Guid.NewGuid(),
                CreateTime = DateTime.Now,
                Name       = model.UserName
            };
            var addSubscriber = _subscriberRepository.AddSubscriber(subscriber);

            if (!addSubscriber)
            {
                return(Guid.Empty);
            }
            passport = new PassportEntity
            {
                UserName     = model.UserName,
                Password     = _encrypt.Encrypt(model.Password),
                SubscriberId = subscriber.Id
            };

            return(_passportRepository.AddPassport(passport) ? subscriber.Id : Guid.Empty);
        }
        public async Task <PassportModel> ScanPassportAsync(byte[] frontImage, byte[] backImage = null, string fileName = null)
        {
            var passport = new PassportModel();

            try
            {
                var formContent = new MultipartFormDataContent
                {
                    { new StringContent("9c5c3b7c9c88957"), "apikey" },
                    { new StringContent("eng"), "language" },
                    { new StringContent("false"), "isOverlayRequired" },
                    { new StreamContent(new MemoryStream(frontImage)), "file", fileName },
                    { new StringContent(fileName.Split('.')[1]), "filetype" }
                };
                var myHttpClient = new HttpClient();
                var response     = await myHttpClient.PostAsync("https://api.ocr.space/parse/image", formContent);

                string stringContent = await response.Content.ReadAsStringAsync();

                JObject  imageData = JObject.Parse(stringContent);
                string[] imageText = imageData["ParsedResults"][0]["ParsedText"].ToString().Split("\r\n");
                passport.Number    = imageText[2];
                passport.LastName  = imageText[3];
                passport.FirstName = imageText[4];
            }
            catch (Exception ex)
            {
            }
            return(passport);
        }
 public async Task <ActionResult> Register(PassportModel model)
 {
     if (_subscriberService.Register(model))
     {
         return(await this.SignIn(model));
     }
     return(Fail(-1, "注册失败"));
 }
Exemple #8
0
        public bool CreatePassport(PassportModel model)
        {
            var subscriber = _subscriberSearchRepository.GetSubscriberById(model.SubscriberId);
            var passport   = subscriber.CreatePassport(model);

            passport.Password = _encrypt.Encrypt(passport.Password);
            return(_passportRepository.AddPassport(passport));
        }
Exemple #9
0
        public async Task <IActionResult> Validate(PassportViewModel model)
        {
            if (ModelState.IsValid)
            {
                var endPoint = string.Concat(_apiSettings.Value.ValidationEndPoint, "ValidateMZR");

                var passportModel = new PassportModel(
                    model.PassportNo,
                    model.Nationality,
                    model.Gender,
                    model.DateOfBirth.ToString("yyMMdd"),
                    model.DateOfExpiration.ToString("yyMMdd"),
                    AlphaNumericChevronOnly(model.PassportNumber),
                    NumericOnly(model.PassportNumberChecksum),
                    AlphaChevronOnly(model.NationalityCode),
                    NumericOnly(model.DateOfBirthMzr),
                    NumericOnly(model.DOBChecksum),
                    GenderString(model.Sex),
                    NumericOnly(model.PassportExpiration),
                    NumericOnly(model.ExpirationChecksum),
                    AlphaNumericChevronOnly(model.PersonalNumber),
                    NumericChevronOnly(model.PersonalNumberChecksum),
                    NumericOnly(model.FinalChecksum),
                    false,
                    false,
                    false,
                    false,
                    false,
                    false,
                    false,
                    false,
                    false,
                    false);


                var response = await ApiClientFactory.Instance.ValidatePassport(passportModel, endPoint);


                var results = new ValidationResultViewModel();
                results.PassportNumberChecksumValid = response.Data.PassportNumberChecksumValid;
                results.DOBChecksumValid            = response.Data.DateOfBirthChecksumValid;
                results.ExpirationChecksumValid     = response.Data.PassportExpirationChecksumValid;
                results.PersonalNumberChecksumValid = response.Data.PersonalNumberChecksumValid;
                results.FinalChecksumValid          = response.Data.FinalChecksumValid;
                results.GenderCCValid         = response.Data.GenderCrossCheckValid;
                results.DOBCCValid            = response.Data.DateOfBirthCrossCheckValid;
                results.ExpirationDateCCValid = response.Data.PassportExpCrossCheckValid;
                results.NationalityCCValid    = response.Data.NationalityCrossCheckValid;
                results.PassportNoCCValid     = response.Data.PassportNoCrossCheckValid;



                ModelState.Clear();
                return(View(results));
            }

            return(await Index());
        }
Exemple #10
0
        public async Task <ActionResult> PassportValidation(PassportModel model)
        {
            using (CancellationTokenSource source = new CancellationTokenSource(TimeSpan.FromMinutes(1)))
            {
                var result = await this.client.ValidatePassportAsync(model, source.Token).ConfigureAwait(false);

                return(View("Validate", result));
            }
        }
Exemple #11
0
        static PassportModel ParsePassportType2(string[] lines)
        {
            var result = new PassportModel();
            var line0  = lines[0];
            var line1  = lines[1];

            try
            {
                /*DocumentType*/
                var documentType = PassportParserHelper.StripPadding(line0.Substring(0, 2));
                /*CountryOfIssue*/
                var countryOfIssue = PassportParserHelper.GetRegion(line0.Substring(2, 3));
                /*Names*/
                var names = PassportParserHelper.GetNames(line0.Substring(5));
                /*DocumentNr*/
                var documentNrRaw              = line1.Substring(0, 9);
                var documentCheckDigit         = line1.Substring(9, 1);
                var checkDigitVerifyDocumentNr = PassportParserHelper.CheckDigitVerify(documentNrRaw, int.Parse(documentCheckDigit));
                /*Nationality*/
                var nationality = PassportParserHelper.GetRegion(line1.Substring(10, 3));
                /*DateOfBirth*/
                var dobRaw              = line1.Substring(13, 6);
                var dobCheckDigit       = line1.Substring(19, 1);
                var checkDigitVerifyDob = PassportParserHelper.CheckDigitVerify(dobRaw, int.Parse(dobCheckDigit));
                var dateOfBirth         = PassportParserHelper.GetFullDate(dobRaw);
                /*Sex*/
                var sex = line1.Substring(20, 1);
                /*ExpirationDate*/
                var expirationDateRaw              = line1.Substring(21, 6);
                var expirationDateDigit            = line1.Substring(27, 1);
                var checkDigitVerifyExpirationDate = PassportParserHelper.CheckDigitVerify(expirationDateRaw, int.Parse(expirationDateDigit));
                var expirationDate = PassportParserHelper.GetFullDate(expirationDateRaw);

                result = new PassportModel
                {
                    DocumentType    = documentType,
                    CountyOfIssue   = countryOfIssue,
                    DocumentNumber  = PassportParserHelper.StripPadding(documentNrRaw),
                    DateOfBirth     = dateOfBirth,
                    Sex             = sex,
                    ExpirartionDate = expirationDate,
                    Nationality     = nationality,
                    Names           = names,
                    Valid           = (
                        checkDigitVerifyDocumentNr &&
                        checkDigitVerifyDob &&
                        checkDigitVerifyExpirationDate
                        )
                };
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine("the scanned text is not a valid MRZ, " + ex.Message);
            }

            return(result);
        }
 public PassportEntity CreatePassport(PassportModel model)
 {
     return(new PassportEntity
     {
         SubscriberId = this.Id,
         UserName = model.UserName,
         Password = model.Password
     });
 }
Exemple #13
0
 protected async Task <bool> HaveUniqueIdNumberAsync(
     PassportModel model,
     int?customerId          = null,
     CancellationToken token = default)
 {
     return(!await _context.Customers
            .Where(x => !x.IsDeleted && x.Id != customerId)
            .Where(x => x.Passport.IdNumber == model.IdNumber)
            .AnyAsync(token));
 }
        public async Task <ActionResult> SignIn(PassportModel model)
        {
            var passportId = _passportService.SignIn(model);

            if (passportId == Guid.Empty)
            {
                return(Fail(-1, "用户名或密码错误"));
            }
            model.Id = passportId;
            await SignInAsync(new SmafacUser(model), true);

            return(Success(model));
        }
        public bool Register(PassportModel model)
        {
            var subscriberId = _subscriberRegister.Register(model);
            var success      = subscriberId != Guid.Empty;

            if (success && _dataInitializations.Any())
            {
                _dataInitializations.ToList().ForEach(
                    initialization =>
                {
                    initialization.Init(subscriberId);
                });
            }
            return(success);
        }
Exemple #16
0
        public Guid SignIn(PassportModel model)
        {
            var passport = _passportSearchRepository.GetPassportByName(model.UserName);

            if (passport == null)
            {
                return(Guid.Empty);
            }
            var verify = passport.VerifyPassword(model.Password);

            if (!verify)
            {
                return(Guid.Empty);
            }
            model.SubscriberId = passport.SubscriberId;
            return(passport.Id);
        }
        public void Validate(PassportModel model)
        {
            var finalCheck = string.Concat(model.MzrPassportNumber, model.PassportNumberChecksum, model.MzrDateOfBirth,
                                           model.DOBChecksum, model.PassportExpiration, model.ExpirationChecksum, model.PersonalNumber,
                                           model.PersonalNumberChecksum);

            model.PassportNumberChecksumValid     = Checksum(model.MzrPassportNumber, model.PassportNumberChecksum);
            model.DateOfBirthChecksumValid        = Checksum(model.MzrDateOfBirth, model.DOBChecksum);
            model.PassportExpirationChecksumValid = Checksum(model.PassportExpiration, model.ExpirationChecksum);
            model.PersonalNumberChecksumValid     = Checksum(model.PersonalNumber, model.PersonalNumberChecksum);
            model.FinalChecksumValid = Checksum(finalCheck, model.FinalChecksum);

            model.GenderCrossCheckValid      = CrossCheck(model.Gender, model.Sex);
            model.DateOfBirthCrossCheckValid = CrossCheck(model.DateOfBirth, model.MzrDateOfBirth);
            model.PassportExpCrossCheckValid = CrossCheck(model.DateOfExpiration, model.PassportExpiration);
            model.NationalityCrossCheckValid = CrossCheck(model.Nationality, model.MzrNationalityCode);
            model.PassportNoCrossCheckValid  = CrossCheck(model.PassportNumber, model.MzrPassportNumber);
        }
Exemple #18
0
        public string Login(PassportModel model)
        {
            var passport = _passportSearchRepository.GetPassportByName(model.UserName);

            if (passport == null)
            {
                return(string.Empty);
            }
            var verify = passport.VerifyPassword(_encrypt.Encrypt(model.Password));

            if (!verify)
            {
                return(string.Empty);
            }
            var signIn = passport.CreateSignIn(passport.Id);

            _signInRepository.AddSignIn(signIn);
            return(signIn.Token);
        }
Exemple #19
0
        public async Task <ValidationModel> ValidatePassportAsync(PassportModel input, CancellationToken cancellationToken)
        {
            EnsureArg.IsNotNull(input, nameof(input));
            cancellationToken.ThrowIfCancellationRequested();

            var requestUri = new Uri(apiEndpoint, "api/passportvalidation/");

            using (var request = new HttpRequestMessage(HttpMethod.Post, requestUri))
            {
                request.Headers.Authorization = new AuthenticationHeaderValue(AuthorizationScheme, authorizationkey);
                var jsonBody = JsonConvert.SerializeObject(input);
                request.Content = new StringContent(jsonBody, Encoding.UTF8, ContentTypeHeader);
                var result = await this.client.SendAsync(request, cancellationToken).ConfigureAwait(false);

                string resultString = await result.Content.ReadAsStringAsync();

                var apiResponseData = JsonConvert.DeserializeObject <ValidationModel>(resultString);

                return(apiResponseData);
            }
        }
Exemple #20
0
 public bool CreatePassport(PassportModel model)
 {
     return(_passportService.CreatePassport(model));
 }
Exemple #21
0
 public SmafacUser(PassportModel passport)
 {
     _passport = passport;
     _username = string.Format("{0};{1}", _passport.SubscriberId.ToString(), _passport.Id.ToString());
 }
Exemple #22
0
 public string Login(PassportModel model)
 {
     return(_passportService.Login(model));
 }
 public bool Register(PassportModel model)
 {
     return(_subscriberService.Register(model));
 }
Exemple #24
0
        private bool ValidatePassport(PassportModel passport, bool dataValidation)
        {
            var bits = passport.ToString().Split(' ');

            if (!(bits.Length == 8) && !(bits.Length == 7 && !bits.Where(b => b.Contains("cid:")).ToList().Any()))
            {
                return(false);
            }

            if (dataValidation)
            {
                if (passport.byr < 1920 || passport.byr > 2020)
                {
                    return(false);
                }
                if (passport.iyr < 2010 || passport.iyr > 2020)
                {
                    return(false);
                }
                if (passport.eyr < 2020 || passport.eyr > 2030)
                {
                    return(false);
                }

                // Bit of regex fun because... Why not
                var match = Regex.Match(passport.hgt, @"^(\d{2,3})([a-z]{2})$");
                if (!match.Groups[2].Value.Equals("in") && !match.Groups[2].Value.Equals("cm"))
                {
                    return(false);
                }
                if (match.Groups[2].Value.Equals("cm"))
                {
                    if (Int32.Parse(match.Groups[1].Value) < 150 || Int32.Parse(match.Groups[1].Value) > 193)
                    {
                        return(false);
                    }
                }
                else
                {
                    if (Int32.Parse(match.Groups[1].Value) < 59 || Int32.Parse(match.Groups[1].Value) > 76)
                    {
                        return(false);
                    }
                }

                // More fun ! (please help)
                match = Regex.Match(passport.hcl, "^#[a-f0-9]{6}$");
                if (!match.Success)
                {
                    return(false);
                }
                if (!passport.ecl.Equals("amb") && !passport.ecl.Equals("blu") && !passport.ecl.Equals("brn") && !passport.ecl.Equals("gry") && !passport.ecl.Equals("grn") && !passport.ecl.Equals("hzl") && !passport.ecl.Equals("oth"))
                {
                    return(false);
                }

                // ...
                match = Regex.Match(passport.pid, @"^\d{9}$");
                if (!match.Success)
                {
                    return(false);
                }

                // Who cares about the cid anyways
            }

            return(true);
        }
        public async Task <PassportModel> ScanPassportAsync(byte[] frontImage, byte[] backImage = null, string fileName = null)
        {
            var passport = new PassportModel();

            try
            {
                if (frontImage == null)
                {
                    return(passport);
                }

                dynamic credential;
                using (var stream = new FileStream("visioncredentails.json", FileMode.Open, FileAccess.Read))
                {
                    string[] scopes = { VisionService.Scope.CloudPlatform };
                    credential = GoogleCredential.FromStream(stream);
                    credential = credential.CreateScoped(scopes);
                }

                var service = new VisionService(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = credential,
                    ApplicationName       = "VisionMule",
                    GZipEnabled           = true,
                });

                BatchAnnotateImagesRequest batchRequest = new BatchAnnotateImagesRequest();
                batchRequest.Requests = new List <AnnotateImageRequest>();

                batchRequest.Requests.Add(new AnnotateImageRequest()
                {
                    Features = new List <Feature>()
                    {
                        new Feature()
                        {
                            Type = "DOCUMENT_TEXT_DETECTION", MaxResults = 1
                        },
                    },
                    ImageContext = new ImageContext()
                    {
                        LanguageHints = new List <string>()
                        {
                            "en"
                        }
                    },
                    Image = new Image()
                    {
                        Content = Convert.ToBase64String(frontImage)
                    }
                });

                if (backImage != null)
                {
                    batchRequest.Requests.Add(new AnnotateImageRequest()
                    {
                        Features = new List <Feature>()
                        {
                            new Feature()
                            {
                                Type = "DOCUMENT_TEXT_DETECTION", MaxResults = 1
                            },
                        },
                        ImageContext = new ImageContext()
                        {
                            LanguageHints = new List <string>()
                            {
                                "en"
                            }
                        },
                        Image = new Image()
                        {
                            Content = Convert.ToBase64String(backImage)
                        }
                    });
                }


                var annotate = service.Images.Annotate(batchRequest);
                BatchAnnotateImagesResponse batchAnnotateImagesResponse = await annotate.ExecuteAsync();

                try
                {
                    string[] passportFrontData = batchAnnotateImagesResponse.Responses[0].FullTextAnnotation.Text.Split('\n');
                    passportFrontData = passportFrontData.Where(x => x.ToString().Length > 1).ToArray();
                    string[] passportSortedDetails = passportFrontData.Where(x => x.ToString().Contains("<<")).ToArray();

                    if (passportSortedDetails.Length > 1)
                    {
                        string[] p1 = passportSortedDetails[0].Replace('<', ' ').Trim().Split(' ');
                        string[] p2 = passportSortedDetails[1].Replace('<', ' ').Trim().Split(' ');
                        passport.LastName = p1[1].Trim().Contains("IND") && p1.Length > 3 ? p1[1].Trim().Remove(0, 3) : p1.Any(p => p.Contains("IND")) && p1[Array.FindIndex(p1, i => i.Contains("IND"))].Length > 3 ? p1[Array.FindIndex(p1, i => i.Contains("IND"))].Remove(0, 3) : null;
                        if (p1.Length >= 2)
                        {
                            for (int i = 2; i < p1.Length; i++)
                            {
                                passport.FirstName += " " + p1[i];
                            }
                        }
                        passport.FirstName = passport.FirstName.Trim();
                        passport.Number    = p2[0].Trim().Length > 3 ? p2[0].Trim() : null;
                    }
                    DateTime dob = DateTime.MinValue;

                    int placeOfBirthIndex = Array.FindIndex(passportFrontData, i => i.Contains("Place of Birth")) + 1;
                    int placeOfIssueIndex = Array.FindIndex(passportFrontData, i => i.Contains("Place of Issue")) + 1;
                    int dobIndex          = Array.FindIndex(passportFrontData, i => i.Contains("Date of Birth"));

                    for (int p = 1; p < 5; p++)
                    {
                        bool isValid = DateTime.TryParseExact(passportFrontData[dobIndex + p], "d/M/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dob);
                        if (isValid)
                        {
                            break;
                        }
                    }

                    passport.DateOfBirth  = dob > DateTime.MinValue ? dob.ToString("dd-MM-yyyy") : string.Empty;
                    passport.PlaceOfBirth = passportFrontData[placeOfBirthIndex];
                    passport.PlaceOfIssue = passportFrontData[placeOfIssueIndex];
                }
                catch (Exception) { }

                string[] passportBackData = null;
                if (backImage != null)
                {
                    passportBackData = batchAnnotateImagesResponse.Responses[1].FullTextAnnotation.Text.Split('\n');
                    passportBackData = passportBackData.Where(x => x.ToString().Length > 1).ToArray();
                }

                if (passportBackData != null)
                {
                    int fatherName = Array.FindIndex(passportBackData, i => i.Contains("Name of Father")) + 1;
                    int motherName = Array.FindIndex(passportBackData, i => i.Contains("Name of Mother")) + 1;
                    int spouseName = Array.FindIndex(passportBackData, i => i.Contains("Name of Spouse")) + 1;
                    int Address    = Array.FindIndex(passportBackData, i => i.Contains("Address")) + 1;

                    passport.FatherName = passportBackData[fatherName];
                    passport.MotherName = motherName > 1 ? passportBackData[motherName] : passportBackData[motherName + 1];
                    passport.SpouseName = spouseName > 3 ? passportBackData[spouseName] : passportBackData[spouseName + 2];
                    passport.Address    = Address > 5 ? (passportBackData[Address] + passportBackData[Address + 1] + passportBackData[Address + 2]).Replace('\n', ',')
                                                    : (passportBackData[Address + 3] + passportBackData[Address + 4] + passportBackData[Address + 5]).Replace('\n', ',');
                }
            }
            catch (Exception ex)
            {
                var st    = new StackTrace(ex, true);
                var frame = st.GetFrame(0);
                var line  = frame.GetFileLineNumber();

                Console.WriteLine("Error: Scanning Image." + ex.Message + line);
            }
            return(passport);
        }