/// <summary>
        /// YYYYMMDDSSSC, YYYYMMDD-SSSC or YYYYMMDD+SSSC
        /// </summary>
        private static bool TryParseShortPattern(string personalIdentityNumber, DateTime date, out SwedishPersonalIdentityNumberParts parts)
        {
            var pattern = new Regex(@"^" +
                                    @"(?<year>[0-9]{2})" +
                                    @"(?<month>[0-9]{2})" +
                                    @"(?<day>[0-9]{2})" +
                                    @"(?<delimiter>[-+]?)" +
                                    @"(?<serialNumber>[0-9]{3})" +
                                    @"(?<checksum>[0-9]{1})" +
                                    @"$");

            var match = pattern.Match(personalIdentityNumber);

            if (!match.Success)
            {
                parts = null;
                return(false);
            }

            var partsFromMatch = GetPartsFromMatch(match);
            var delimiter      = GetStringValue(match, "delimiter");
            var fullYear       = GetFullYear(partsFromMatch.Year, partsFromMatch.Month, partsFromMatch.Day, delimiter, date);

            parts = new SwedishPersonalIdentityNumberParts(fullYear, partsFromMatch.Month, partsFromMatch.Day, partsFromMatch.SerialNumber, partsFromMatch.Checksum);
            return(true);
        }
        /// <summary>
        /// YYYYMMDDSSSC or YYYYMMDD-SSSC
        /// </summary>
        private static bool TryParseLongPattern(string personalIdentityNumber, out SwedishPersonalIdentityNumberParts parts)
        {
            var pattern = new Regex(@"^" +
                                    @"(?<year>[0-9]{4})" +
                                    @"(?<month>[0-9]{2})" +
                                    @"(?<day>[0-9]{2})" +
                                    @"(?<delimiter>[-]?)" +
                                    @"(?<serialNumber>[0-9]{3})" +
                                    @"(?<checksum>[0-9]{1})" +
                                    @"$");

            var match = pattern.Match(personalIdentityNumber);

            if (!match.Success)
            {
                parts = null;
                return(false);
            }

            parts = GetPartsFromMatch(match);
            return(true);
        }