protected override VatValidationResult OnValidate(string vat) { if (vat.Length == 9) { if (vat[7] != '1') { return(VatValidationResult.Failed("9 character VAT numbers should have 1 in 8th position.")); } var sum = 0; for (var index = 0; index < 8; index++) { sum += vat[index].ToInt() * (index + 1); } var checkDigit = sum % 11; if (checkDigit == 10) { checkDigit = vat.Sum(Multipliers); } if (checkDigit == 10) { checkDigit = 0; } var isValid = checkDigit == vat[8].ToInt(); return(!isValid ? VatValidationResult.Failed("Invalid LT vat: checkValue") : VatValidationResult.Success()); } return(TemporarilyRegisteredTaxPayers(vat)); }
protected override VatValidationResult OnValidate(string vat) { var sum = vat.Sum(Multipliers); // Old VAT numbers (pre 2020) - Modulus 11 test var checkMod11 = sum % 11; if (checkMod11 > 9) { checkMod11 = 0; } var isValidMod11 = checkMod11 == vat[8].ToInt(); if (isValidMod11) { return(VatValidationResult.Success()); } // New VAT numbers (post 2020) - Modulus 97 test const string stringValueNl = "2321"; const string stringValueB = "11"; vat = vat.Replace("B", stringValueB); var isValidMod97 = long.Parse(stringValueNl + vat) % 97 == 1; return(!isValidMod97 ? VatValidationResult.Failed("Invalid NL vat: checkValue") : VatValidationResult.Success()); }
protected override VatValidationResult OnValidate(string vat) { if (RegexType2.IsMatch(vat)) { vat = "0" + vat.Substring(2, 7) + vat.Substring(0, 1) + vat.Substring(7, 8); } var sum = vat.Sum(Multipliers); // If the number is type 3 then we need to include the trailing A or H in the calculation if (RegexType3.IsMatch(vat)) { // Add in a multiplier for the character A (1*9=9) or H (8*9=72) if (vat[8] == 'H') { sum += 72; } else { sum += 9; } } var checkDigit = sum % 23; var isValid = vat[7] == (checkDigit == 0 ? 'W' : (char)(checkDigit + 64)); return(!isValid ? VatValidationResult.Failed("Invalid IE vat: checkValue") : VatValidationResult.Success()); }
protected override VatValidationResult OnValidate(string vat) { // Only do check digit validation for standard VAT numbers if (vat.Length != 8) { return(VatValidationResult.Success()); } var sum = vat.Sum(Multipliers); var checkDigit = 11 - sum % 11; if (checkDigit == 10) { checkDigit = 0; } if (checkDigit == 11) { checkDigit = 1; } var isValid = checkDigit == vat[7].ToInt(); return(!isValid ? VatValidationResult.Failed("Invalid CZ vat: checkValue") : VatValidationResult.Success()); }
protected override VatValidationResult OnValidate(string vat) { var product = 10; for (var index = 0; index < 8; index++) { var sum = (vat[index].ToInt() + product) % 10; if (sum == 0) { sum = 10; } product = 2 * sum % 11; } var val = 11 - product; var checkDigit = val == 10 ? 0 : val; var isValid = checkDigit == vat[8].ToInt(); return(!isValid ? VatValidationResult.Failed("Invalid DE vat: checkValue") : VatValidationResult.Success()); }
private static VatValidationResult TemporarilyRegisteredTaxPayers(string vat) { if (vat[10] != '1') { return(VatValidationResult.Failed("Temporarily Registered Tax Payers should have 11th character one")); } var total = vat.Sum(MultipliersTemporarily); // double check digit calculation if (total % 11 == 10) { total = vat.Sum(MultipliersDoubleCheck); } // Establish check digit. total %= 11; if (total == 10) { total = 0; } var isValid = total == vat[11].ToInt(); return(!isValid ? VatValidationResult.Failed("Invalid LT vat: checkValue") : VatValidationResult.Success()); }
protected override VatValidationResult OnValidate(string vat) { var end = vat.Length - 1; var controlDigit = vat[end].ToInt(); var slice = vat.Slice(0, end); vat = slice.PadLeft(9, '0'); var sum = vat.Sum(Multipliers); var checkDigit = sum * 10 % 11; if (checkDigit == 10) { checkDigit = 0; } var isValid = checkDigit == controlDigit; return(!isValid ? VatValidationResult.Failed("Invalid RO vat: checkValue") : VatValidationResult.Success()); }
protected override VatValidationResult OnValidate(string vat) { var isValid = int.Parse(vat.Substring(0, 6)) % 89 == int.Parse(vat.Substring(6, 2)); return(!isValid ? VatValidationResult.Failed("Invalid LU vat: checkValue") : VatValidationResult.Success()); }
protected override VatValidationResult OnValidate(string vat) { var nr = ulong.Parse(vat); var isValid = nr % 11 == 0; return(!isValid ? VatValidationResult.Failed("Invalid SK vat: checkValue") : VatValidationResult.Success()); }
protected override VatValidationResult OnValidate(string vat) { var sum = vat.Sum(Multipliers); var isValid = sum % 11 == 0; return(!isValid ? VatValidationResult.Failed("Invalid DK vat: checkValue") : VatValidationResult.Success()); }
protected override VatValidationResult OnValidate(string vat) { var sum = vat.Sum(Multipliers); var checkDigit = 37 - sum % 37; var isValid = checkDigit == int.Parse(vat.Substring(6, 2)); return(!isValid ? VatValidationResult.Failed("Invalid MT vat: checkValue") : VatValidationResult.Success()); }
protected override VatValidationResult OnValidate(string vat) { if (int.Parse(vat.Substring(0, 2)) == 12) { return(VatValidationResult.Failed("CY vat first 2 characters cannot be 12")); } var result = 0; for (var index = 0; index < 8; index++) { var temp = vat[index].ToInt(); if (index % 2 == 0) { switch (temp) { case 0: temp = 1; break; case 1: temp = 0; break; case 2: temp = 5; break; case 3: temp = 7; break; case 4: temp = 9; break; default: temp = temp * 2 + 3; break; } } result += temp; } var checkDigit = result % 26; var isValid = vat[8].ToInt() == checkDigit + 65; return(!isValid ? VatValidationResult.Failed("Invalid CY vat: checkValue") : VatValidationResult.Success()); }
protected override VatValidationResult OnValidate(string vat) { var sum = vat.Sum(Multipliers); var checkDigit = 11 - sum % 11; if (checkDigit > 9) { checkDigit = 0; } var isValid = checkDigit == vat[8].ToInt(); return(!isValid ? VatValidationResult.Failed("Invalid PT vat: checkValue") : VatValidationResult.Success()); }
protected override VatValidationResult OnValidate(string vat) { var validationKey = vat.Substring(0, 2); var val = int.Parse(vat.Substring(2)); if (!int.TryParse(validationKey, out var temp)) { return(VatValidationResult.Success()); } var checkDigit = (12 + 3 * (val % 97)) % 97; var isValid = checkDigit == temp; return(!isValid ? VatValidationResult.Failed("Invalid FR vat: checkValue") : VatValidationResult.Success()); }
protected override VatValidationResult OnValidate(string vat) { // Only check the legal bodies if (Regex.IsMatch(vat, "/^[0-3]/")) { var result = Regex.IsMatch(vat, "^[0-3][0-9][0-1][0-9]"); return(!result ? VatValidationResult.Failed("Invalid LV vat: checkValue") : VatValidationResult.Success()); } var sum = vat.Sum(Multipliers); var checkDigit = sum % 11; if (checkDigit == 4 && vat[0] == '9') { checkDigit -= 45; } if (checkDigit == 4) { checkDigit = 4 - checkDigit; } else { if (checkDigit > 4) { checkDigit = 14 - checkDigit; } else { if (checkDigit < 4) { checkDigit = 3 - checkDigit; } } } var isValid = checkDigit == vat[10].ToInt(); return(!isValid ? VatValidationResult.Failed("Invalid LV vat: checkValue") : VatValidationResult.Success()); }
protected override VatValidationResult OnValidate(string vat) { if (vat.Length == 10 && vat[0] != '0') { return(VatValidationResult.Failed("First character of 10 digit numbers should be 0.")); } if (vat.Length == 9) { vat = vat.PadLeft(10, '0'); } // Modulus 97 check on last nine digits var isValid = 97 - int.Parse(vat.Substring(0, 8)) % 97 == int.Parse(vat.Substring(8, 2)); return(!isValid ? VatValidationResult.Failed("Invalid BE vat: checkValue.") : VatValidationResult.Success()); }
protected override VatValidationResult OnValidate(string vat) { bool isValid; if (vat.Length == 9) { isValid = Bg9DigitsVat(vat); return isValid ? VatValidationResult.Success() : VatValidationResult.Failed("Invalid 9 digits vat."); } if (BgPhysicalPerson(vat)) { return VatValidationResult.Success(); } isValid = BgForeignerPhysicalPerson(vat) || BgMiscellaneousVatNumber(vat); return !isValid ? VatValidationResult.Failed("") : VatValidationResult.Success(); }
protected override VatValidationResult OnValidate(string vat) { // The last three digits are the issuing office, and cannot exceed more 201 if (int.Parse(vat.Substring(0, 7)) == 0) { return(VatValidationResult.Failed("")); } var temp = int.Parse(vat.Substring(7, 3)); if ((temp < 1 || temp > 201) && temp != 999 && temp != 888) { return(VatValidationResult.Failed("")); } var index = 0; var sum = 0; foreach (var m in Multipliers) { temp = vat[index++].ToInt() * m; sum += temp > 9 ? (int)Math.Floor(temp / 10D) + temp % 10 : temp; } var checkDigit = 10 - sum % 10; if (checkDigit > 9) { checkDigit = 0; } var isValid = checkDigit == vat[10].ToInt(); return(!isValid ? VatValidationResult.Failed("Invalid IT vat: checkValue") : VatValidationResult.Success()); }
protected override VatValidationResult OnValidate(string vat) { var index = 0; var sum = 0; foreach (var m in Multipliers) { var temp = vat[index++].ToInt() * m; sum += temp > 9 ? (int)Math.Floor(temp / 10D) + temp % 10 : temp; } var checkDigit = 10 - sum % 10; if (checkDigit == 10) { checkDigit = 0; } var isValid = checkDigit == vat[9].ToInt(); return(!isValid ? VatValidationResult.Failed("Invalid SE vat: checkValue") : VatValidationResult.Success()); }
protected override VatValidationResult OnValidate(string vat) { var index = 1; var sum = 0; foreach (var digit in Multipliers) { var temp = vat[index++].ToInt() * digit; sum += temp > 9 ? (int)Math.Floor(temp / 10D) + temp % 10 : temp; } var checkDigit = 10 - (sum + 4) % 10; if (checkDigit == 10) { checkDigit = 0; } var isValid = checkDigit == vat[8].ToInt(); return(!isValid ? VatValidationResult.Failed($"Invalid {CountryCode} vat: checkValue") : VatValidationResult.Success()); }
protected override VatValidationResult OnValidate(string vat) { var product = 10; for (var index = 0; index < 10; index++) { int sum = (vat[index].ToInt() + product) % 10; if (sum == 0) { sum = 10; } product = 2 * sum % 11; } var checkDigit = (product + vat[10].ToInt()) % 10; var isValid = checkDigit == 1; return(!isValid ? VatValidationResult.Failed("Invalid HR vat: checkValue") : VatValidationResult.Success()); }
protected override VatValidationResult OnValidate(string vat) { var prefix = vat.Substring(0, 2); int no; if (prefix == "GD" && int.TryParse(vat.Substring(2, 3), out no)) { // return no < 500; } if (prefix == "HA" && int.TryParse(vat.Substring(2, 3), out no)) { // return no > 499; } if (prefix == "HA") { return(VatValidationResult.Failed("")); } if (vat[0].ToInt() == 0) { return(VatValidationResult.Failed("0 VAT numbers disallowed")); } // Check range is OK for modulus 97 calculation no = int.Parse(vat.Substring(0, 7)); var total = vat.Sum(Multipliers); // Old numbers use a simple 97 modulus, but new numbers use an adaptation of that (less 55). Our // Establish check digits by subtracting 97 from total until negative. var cd = total; while (cd > 0) { cd -= 97; } // Get the absolute value and compare it with the last two characters of the VAT number. If the // same, then it is a valid traditional check digit. However, even then the number must fit within // certain specified ranges. cd = Math.Abs(cd); if (cd == int.Parse(vat.Substring(7, 2)) && no < 9990001 && (no < 100000 || no > 999999) && (no < 9490001 || no > 9700000)) { return(VatValidationResult.Success()); } // Now try the new method by subtracting 55 from the check digit if we can - else add 42 if (cd >= 55) { cd -= 55; } else { cd += 42; } var isValid = cd == int.Parse(vat.Substring(7, 2)) && no > 1000000; return(!isValid ? VatValidationResult.Failed("Invalid GB vat: checkValue") : VatValidationResult.Success()); }