コード例 #1
0
 public void LyhnInvalidStringTest2(string arg)
 {
     Assert.Catch <ArgumentException>(() =>
     {
         Assert.False(LuhnAlgorithm.HasValidCheckDigit(arg));
     });
 }
コード例 #2
0
        public static VGRIdentifier BuildVGRIdentifier(this PersonIdentifierBuilder builder)
        {
            var random = new Random(Guid.NewGuid().GetHashCode());
            var date   = new PersonIdentifierBuilder.PersonIdentifierDateBuilder(random).Build(builder);

            var gender    = new PersonIdentifierBuilder.PersonIdentifierGenderBuilder(random).Build(builder, true);
            var genderMap = VGRFormatter.GenderMap.Find(x => x.Gender == gender);

            int sequence = 0;

            if (gender == PersonIdentityGender.Female)
            {
                sequence = 2 * random.Next(6 / 2, 80 / 2);
            }
            if (gender == PersonIdentityGender.Male)
            {
                sequence = 2 * random.Next(6 / 2, 80 / 2) + 1;
            }
            if (gender == PersonIdentityGender.Unknown)
            {
                sequence = random.Next(80, 90);
            }

            var number       = $"{date:yyyyMMdd}{genderMap.Number}{sequence:00}";
            var luhnCheckSum = LuhnAlgorithm.Generate(number);

            var fourLast = $"{genderMap.Letter}{sequence:00}{luhnCheckSum}";

            return(new VGRIdentifier($"{date:yyyyMMdd}{fourLast}"));
        }
コード例 #3
0
ファイル: CompanyFaker.cs プロジェクト: snoozins/FakerDotNet
        public string FrenchSiretNumber()
        {
            var location  = _fakerContainer.Number.LeadingZeroNumber(3).PadLeft(4, '0');
            var orgNumber = long.Parse(FrenchSirenNumber() + location);

            return($"{orgNumber}{LuhnAlgorithm.GetCheckValue(orgNumber)}");
        }
コード例 #4
0
    public PersonalNumber(string personalNumber)
    {
        rawPersonalNumber = personalNumber;
        var matches = personNoRegex.Matches(personalNumber);
        var normalizedYYMMDDXXXC = string.Empty;

        isPlus100YearsOld = false;
        foreach (Match match in matches)
        {
            if (match.Success)
            {
                normalizedYYMMDDXXXC = match.Groups[2].Value + match.Groups[3].Value +
                                       match.Groups[4].Value + match.Groups[6].Value;
                if (match.Groups[5].Success)
                {
                    isPlus100YearsOld = match.Groups[5].Value == "+";
                }
                break;
            }
        }
        if (normalizedYYMMDDXXXC.Length > 6)
        {
            isValid = personNoRegex.IsMatch(personalNumber) && LuhnAlgorithm.ValidateChecksum(normalizedYYMMDDXXXC);
        }
        else
        {
            isValid = personNoRegex.IsMatch(personalNumber);
        }
        this.personalNumber = string.IsNullOrEmpty(normalizedYYMMDDXXXC) ? rawPersonalNumber : normalizedYYMMDDXXXC;
    }
コード例 #5
0
ファイル: CompanyFaker.cs プロジェクト: snoozins/FakerDotNet
        public string FrenchSirenNumber()
        {
            // Get a random French SIREN number. See more here https://fr.wikipedia.org/wiki/Syst%C3%A8me_d%27identification_du_r%C3%A9pertoire_des_entreprises
            var @base = int.Parse(_fakerContainer.Number.Number(8));

            return($"{@base}{LuhnAlgorithm.GetCheckValue(@base)}");
        }
コード例 #6
0
        public VGRFormatter(string value)
            : base(value)
        {
            if (Value.Length != 12)
            {
                throw new PersonIdentifierFormatException(value, ExceptionMessage.IncorrectLength);
            }

            if (SerialNumber.Length != 4)
            {
                throw new PersonIdentifierFormatException(value, ExceptionMessage.IncorrectLength);
            }

            GenderIndicator   = SerialNumber[0];
            TwoDigitSerial    = Convert.ToInt32(SerialNumber.Substring(1, 2));
            LuhnControlNumber = Convert.ToInt32(SerialNumber[3]);

            var nr  = GenderMap.FirstOrDefault(x => x.Letter == GenderIndicator)?.Number ?? throw new PersonIdentifierFormatException(value, $"Incorrect VGR format -> invalid gender indicator '{GenderIndicator}'.");
            var str = Value.Replace(GenderIndicator, nr);

            if (!LuhnAlgorithm.Validate(str))
            {
                throw new PersonIdentifierFormatException(value, ExceptionMessage.LuhnError);
            }
        }
コード例 #7
0
        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            if (string.IsNullOrWhiteSpace((value ?? "").ToString()))
            {
                return(new ValidationResult(false, "Field is required."));
            }
            var code = (value ?? "").ToString();

            return(!LuhnAlgorithm.CheckLuhn(code) ? new ValidationResult(false, "Verify code is incorrect.") : ValidationResult.ValidResult);
        }
コード例 #8
0
 public void LyhnCardTypeTest1()
 {
     foreach (var card in _validCards)
     {
         var hasValidCheckDigit = LuhnAlgorithm.HasValidCheckDigit(card.Key);
         if (!hasValidCheckDigit)
         {
             TestContext.WriteLine(card.Key);
         }
         Assert.True(hasValidCheckDigit);
     }
 }
コード例 #9
0
        public static SLLIdentifier BuildSLLIdentifier(this PersonIdentifierBuilder builder)
        {
            var random = new Random(Guid.NewGuid().GetHashCode());

            var year = new PersonIdentifierBuilder.PersonIdentifierDateBuilder(random).Build(builder).Year;

            var sequence = random.Next(0, 100000);

            var nr           = $"{SLLFormatter.Start}{year:0000}{sequence:00000}";
            var luhnCheckSum = LuhnAlgorithm.Generate(nr);

            return(new SLLIdentifier($"{nr}{luhnCheckSum}"));
        }
コード例 #10
0
ファイル: CompanyFaker.cs プロジェクト: snoozins/FakerDotNet
        public string SwedishOrganisationNumber()
        {
            // Get a random Swedish organization number. See more here https://sv.wikipedia.org/wiki/Organisationsnummer
            // Valid leading digit: 1, 2, 3, 5, 6, 7, 8, 9
            // Valid third digit: >= 2
            // Last digit is a control digit
            var @base = long.Parse(string.Join("",
                                               _fakerContainer.Number.NonZeroDigit(),
                                               _fakerContainer.Number.Digit(),
                                               (int)_fakerContainer.Number.Between(2, 9),
                                               _fakerContainer.Number.Number(6)
                                               ));

            return($"{@base}{LuhnAlgorithm.GetCheckValue(@base)}");
        }
コード例 #11
0
        public SLLFormatter(string value)
            : base(value)
        {
            if (Value.Length != 12)
            {
                throw new PersonIdentifierFormatException(value, ExceptionMessage.IncorrectLength);
            }

            if (!LuhnAlgorithm.Validate(value))
            {
                throw new PersonIdentifierFormatException(value, ExceptionMessage.LuhnError);
            }

            var start = Value.Substring(0, 2);

            if (start != Start)
            {
                throw new PersonIdentifierFormatException(value, $"Incorrect SLL format -> starting with '{start}'. Expected '{Start}'.");
            }

            Year = Convert.ToInt32(Value.Substring(2, 4));
            FiveDigitSerialNumber = Convert.ToInt32(Value.Substring(6, 5));
            LuhnControlNumber     = Convert.ToInt32(Value.Substring(11, 1));
        }
コード例 #12
0
 public void GetCheckValue_returns_check_value_for_number(long number, int expected)
 {
     Assert.AreEqual(expected, LuhnAlgorithm.GetCheckValue(number));
 }
コード例 #13
0
 public void LyhnCardTypeFormatCheckInvalidDash()
 {
     Assert.Throws(typeof(ArgumentException), () => LuhnAlgorithm.HasValidCheckDigit(_invalidCardFormatDash));
 }
コード例 #14
0
 public void LyhnCardTypeInvalidTest1()
 {
     Assert.False(LuhnAlgorithm.HasValidCheckDigit(_invalidCard));
 }
コード例 #15
0
 public void SetUp()
 {
     _sut = new LuhnAlgorithm();
 }