From b208ae2a99c865546efa91c120fbfc6a248226bf Mon Sep 17 00:00:00 2001 From: FH Date: Fri, 8 Apr 2022 17:58:43 +0200 Subject: [PATCH] fix validation --- Properties/AssemblyInfo.cs | 4 ++-- VatFormatValidator.cs | 43 +++++++++++++++++++++++++------------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs index 8af8c75..41a5706 100644 --- a/Properties/AssemblyInfo.cs +++ b/Properties/AssemblyInfo.cs @@ -16,5 +16,5 @@ using System.Runtime.InteropServices; [assembly: ComVisible(false)] [assembly: Guid("aaf08873-14e5-411d-8ec8-629782ac8f03")] -[assembly: AssemblyVersion("2.1.22098.1123")] -[assembly: AssemblyFileVersion("2.1.22098.1123")] \ No newline at end of file +[assembly: AssemblyVersion("2.1.22098.1531")] +[assembly: AssemblyFileVersion("2.1.22098.1531")] \ No newline at end of file diff --git a/VatFormatValidator.cs b/VatFormatValidator.cs index ccea009..b86ed5f 100644 --- a/VatFormatValidator.cs +++ b/VatFormatValidator.cs @@ -27,7 +27,7 @@ namespace FCS.Lib.Utility // C8 check-digit MOD11 // C1 > 0 // R = (2*C1 + 7*C2 + 6*C3 + 5*C4 + 4*C5 + 3*C6 + 2*C7 + C8) - if(vatNumber.Length == 8 && long.Parse(vatNumber) != 0) + if(vatNumber.Length == 8 && long.TryParse(vatNumber, out _)) return ValidateMod11(vatNumber); return false; } @@ -39,9 +39,16 @@ namespace FCS.Lib.Utility // C1..C8 random 0 to 9 // C9 check-digit MOD11 // C10 C11 C12 chars == MVA - if (vatNumber.Length == 9 && long.Parse(vatNumber) != 0) - return ValidateMod11(vatNumber); - return false; + try + { + if (vatNumber.Length == 9 && long.TryParse(vatNumber, out _)) + return ValidateMod11(vatNumber); + return false; + } + catch + { + return false; + } } private static bool ValidateFormatSe(string vatNumber) @@ -54,7 +61,7 @@ namespace FCS.Lib.Utility // https://www.skatteverket.se/skatter/mervardesskattmoms/momsregistreringsnummer.4.18e1b10334ebe8bc80002649.html // C11 C12 == 01 (De två sista siffrorna är alltid 01) - if (vatNumber.Length != 12 || vatNumber.Substring(10) != "01" || long.Parse(vatNumber) == 0) + if (vatNumber.Length != 12 || vatNumber.Substring(10) != "01" || !long.TryParse(vatNumber, out _)) return false; var r = new[] { 0, 2, 4, 6, 8 } @@ -67,20 +74,28 @@ namespace FCS.Lib.Utility private static bool ValidateMod11(string number) { - if (long.Parse(number) == 0) - return false; - var sum = 0; - for (int i = number.Length - 1, multiplier = 1; i >= 0; i--) + try { - // Console.WriteLine($"char: {number[i]} multiplier: {multiplier}"); - sum += (int)char.GetNumericValue(number[i]) * multiplier; - if (++multiplier > 7) multiplier = 2; + if (long.Parse(number) == 0) + return false; + var sum = 0; + for (int i = number.Length - 1, multiplier = 1; i >= 0; i--) + { + // Console.WriteLine($"char: {number[i]} multiplier: {multiplier}"); + sum += (int)char.GetNumericValue(number[i]) * multiplier; + if (++multiplier > 7) multiplier = 2; + } + + return sum % 11 == 0; + } + catch + { + return false; } - return sum % 11 == 0; } - private static string SanitizeVatNumber(string vatNumber) + public static string SanitizeVatNumber(string vatNumber) { vatNumber = vatNumber.ToUpperInvariant(); return vatNumber