예제 #1
0
        public void Initialize()
        {
            _pid = "9207113466";

            _pidObject = new Pid()
            {
                YearSegment     = 92,
                MontSegment     = 07,
                DaySegment      = 11,
                RegionSegment   = 346,
                OrderSegment    = 5,
                GenderSegment   = 6,
                ChecksumSegment = 6
            };

            _pidValidationResult = new PidValidationResult()
            {
                Pid = _pidObject,
                ValidationStatus = PidValidationStatus.Valid
            };

            _pidValidationService = new Mock <IPidValidationService>();
            _pidValidationService.Setup(x => x.Validate(It.IsAny <string>()))
            .Returns(_pidValidationResult);

            _validatePidModel = new ValidatePidModel(_pidValidationService.Object)
            {
                Pid = _pid
            };
        }
예제 #2
0
        public PidValidationResult Validate(string pid)
        {
            if (string.IsNullOrEmpty(pid))
            {
                throw new ArgumentNullException(nameof(pid));
            }

            if (!long.TryParse(pid, out long pidNumber))
            {
                throw new FormatException(nameof(pid));
            }

            if (!ValidateRange(pid, pidNumber))
            {
                throw new ArgumentOutOfRangeException(nameof(pid));
            }

            var pidObject = _pidDataExtractor.Segregate(pid);

            if (pidObject == null)
            {
                throw new ArgumentNullException(nameof(pidObject));
            }

            var result = new PidValidationResult()
            {
                Pid = pidObject
            };

            var dateValidationStatus = ValidateDate(pidObject);

            if (dateValidationStatus != PidValidationStatus.Valid)
            {
                result.ValidationStatus = dateValidationStatus;
                return(result);
            }

            var checksumValidationStatus = ValidateChecksum(pid, pidObject.ChecksumSegment);

            if (checksumValidationStatus != PidValidationStatus.Valid)
            {
                result.ValidationStatus = checksumValidationStatus;
                return(result);
            }

            return(result);
        }