diff --git a/MyNumberNET.sln b/MyNumberNET.sln index de907df..d0d01ae 100644 --- a/MyNumberNET.sln +++ b/MyNumberNET.sln @@ -8,6 +8,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyNumberNET_CLI", "MyNumber EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyNumberNET_Test", "MyNumberNET_Test\MyNumberNET_Test.csproj", "{0EE82E05-BD36-4024-BC61-A9B56E97E6B8}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyNumberNET_ApiServer", "MyNumberNET_ApiServer\MyNumberNET_ApiServer.csproj", "{5ABBBF4C-8CD9-405F-B2B4-2CD71A97CE1B}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -26,6 +28,10 @@ Global {0EE82E05-BD36-4024-BC61-A9B56E97E6B8}.Debug|Any CPU.Build.0 = Debug|Any CPU {0EE82E05-BD36-4024-BC61-A9B56E97E6B8}.Release|Any CPU.ActiveCfg = Release|Any CPU {0EE82E05-BD36-4024-BC61-A9B56E97E6B8}.Release|Any CPU.Build.0 = Release|Any CPU + {5ABBBF4C-8CD9-405F-B2B4-2CD71A97CE1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5ABBBF4C-8CD9-405F-B2B4-2CD71A97CE1B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5ABBBF4C-8CD9-405F-B2B4-2CD71A97CE1B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5ABBBF4C-8CD9-405F-B2B4-2CD71A97CE1B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/MyNumberNET/MyNumber.cs b/MyNumberNET/MyNumber.cs index 6e83afb..a130121 100644 --- a/MyNumberNET/MyNumber.cs +++ b/MyNumberNET/MyNumber.cs @@ -40,13 +40,18 @@ public static int CalculateCheckDigits(int[] number) throw new MyNumberMalformedException("Malformed sequence. Must be 11 digits."); if (Array.Exists(number, n => n < 0 || n > 9)) throw new MyNumberMalformedException("All digits must be between 0 and 9."); - Array.Reverse(number); + + // Calculate check digit using the official My Number algorithm + // Process digits from right to left with specific weights + // Array indexing: number[11-n] safely accesses indices 10,9,8,...,0 for n=1,2,3,...,11 + // This avoids Array.Reverse() while maintaining correct algorithm behavior var sum = 0; + // First loop: rightmost 6 digits (indices 10,9,8,7,6,5) with weights 2,3,4,5,6,7 for (var n = 1; n < 7; n++) - sum += (n + 1) * number[n - 1]; + sum += (n + 1) * number[11 - n]; + // Second loop: leftmost 5 digits (indices 4,3,2,1,0) with weights 2,3,4,5,6 for (var n = 7; n < 12; n++) - sum += (n - 5) * number[n - 1]; - Array.Reverse(number); + sum += (n - 5) * number[11 - n]; if (sum % 11 <= 1) return 0; return 11 - sum % 11; diff --git a/MyNumberNET_ApiServer/Controllers/MyNumberController.cs b/MyNumberNET_ApiServer/Controllers/MyNumberController.cs index 1f88367..a9c197c 100644 --- a/MyNumberNET_ApiServer/Controllers/MyNumberController.cs +++ b/MyNumberNET_ApiServer/Controllers/MyNumberController.cs @@ -18,6 +18,13 @@ public class MyNumberController : ControllerBase [HttpPost("verify")] public ActionResult Verify([FromBody] int[] number) { + // Input validation before calling business logic + if (number == null) + return BadRequest("Input array is null."); + if (number.Length != 12) + return BadRequest("Malformed sequence. Must be 12 digits."); + if (number.Any(n => n < 0 || n > 9)) + return BadRequest("All digits must be between 0 and 9."); try { bool isValid = MyNumber.VerifyNumber(number); @@ -37,6 +44,13 @@ public ActionResult Verify([FromBody] int[] number) [HttpPost("checkdigit")] public ActionResult CheckDigit([FromBody] int[] number) { + // Input validation before calling business logic + if (number == null) + return BadRequest("Input array is null."); + if (number.Length != 11) + return BadRequest("Malformed sequence. Must be 11 digits."); + if (number.Any(n => n < 0 || n > 9)) + return BadRequest("All digits must be between 0 and 9."); try { int checkDigit = MyNumber.CalculateCheckDigits(number); diff --git a/MyNumberNET_CLI/MyNumberNET_CLI.csproj b/MyNumberNET_CLI/MyNumberNET_CLI.csproj index a6b14b9..67fa9d0 100644 --- a/MyNumberNET_CLI/MyNumberNET_CLI.csproj +++ b/MyNumberNET_CLI/MyNumberNET_CLI.csproj @@ -17,7 +17,7 @@ latest - + diff --git a/MyNumberNET_Test/MyNumberNET_Test.csproj b/MyNumberNET_Test/MyNumberNET_Test.csproj index 066552b..a02ca83 100644 --- a/MyNumberNET_Test/MyNumberNET_Test.csproj +++ b/MyNumberNET_Test/MyNumberNET_Test.csproj @@ -17,10 +17,10 @@ latest - - - - + + + +