From cbeaddad9494fde1d0ce098137c60657fa25cd54 Mon Sep 17 00:00:00 2001 From: Hideki Saito Date: Tue, 26 Aug 2025 01:43:45 -0700 Subject: [PATCH 1/7] Update package references for NLog and testing frameworks to latest versions --- MyNumberNET_CLI/MyNumberNET_CLI.csproj | 2 +- MyNumberNET_Test/MyNumberNET_Test.csproj | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/MyNumberNET_CLI/MyNumberNET_CLI.csproj b/MyNumberNET_CLI/MyNumberNET_CLI.csproj index a6b14b9..7870078 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..b39c7ea 100644 --- a/MyNumberNET_Test/MyNumberNET_Test.csproj +++ b/MyNumberNET_Test/MyNumberNET_Test.csproj @@ -17,10 +17,10 @@ latest - - - - + + + + From 56bb915abe805a751bba3584545d1c46ac6bb004 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Aug 2025 19:03:55 +0000 Subject: [PATCH 2/7] Bump NLog from 5.2.0 to 6.0.3 --- updated-dependencies: - dependency-name: NLog dependency-version: 6.0.3 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- MyNumberNET_CLI/MyNumberNET_CLI.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MyNumberNET_CLI/MyNumberNET_CLI.csproj b/MyNumberNET_CLI/MyNumberNET_CLI.csproj index a6b14b9..7870078 100644 --- a/MyNumberNET_CLI/MyNumberNET_CLI.csproj +++ b/MyNumberNET_CLI/MyNumberNET_CLI.csproj @@ -17,7 +17,7 @@ latest - + From 46a20f4bd4c8aeb9c7e30453a1c96dcfcb50eac5 Mon Sep 17 00:00:00 2001 From: Hideki Saito Date: Wed, 3 Sep 2025 20:53:04 -0700 Subject: [PATCH 3/7] Update MSTest package references to version 3.10.4 --- MyNumberNET_Test/MyNumberNET_Test.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MyNumberNET_Test/MyNumberNET_Test.csproj b/MyNumberNET_Test/MyNumberNET_Test.csproj index b39c7ea..a02ca83 100644 --- a/MyNumberNET_Test/MyNumberNET_Test.csproj +++ b/MyNumberNET_Test/MyNumberNET_Test.csproj @@ -18,8 +18,8 @@ - - + + From c8bf6c5cf0db12dac20fc63c1157a9abff6ebc5c Mon Sep 17 00:00:00 2001 From: Hideki Saito Date: Wed, 3 Sep 2025 20:56:24 -0700 Subject: [PATCH 4/7] Add MyNumberNET_ApiServer project to the solution --- MyNumberNET.sln | 6 ++++++ 1 file changed, 6 insertions(+) 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 From f4007a6b2094d09c298e46c13a30fbddc5c4687f Mon Sep 17 00:00:00 2001 From: Hideki Saito Date: Wed, 3 Sep 2025 23:43:25 -0700 Subject: [PATCH 5/7] Enhance input validation for MyNumber verification and check digit endpoints --- MyNumberNET/MyNumber.cs | 6 ++---- .../Controllers/MyNumberController.cs | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/MyNumberNET/MyNumber.cs b/MyNumberNET/MyNumber.cs index 6e83afb..c888afb 100644 --- a/MyNumberNET/MyNumber.cs +++ b/MyNumberNET/MyNumber.cs @@ -40,13 +40,11 @@ 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); var sum = 0; for (var n = 1; n < 7; n++) - sum += (n + 1) * number[n - 1]; + sum += (n + 1) * number[11 - n]; 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); From 5b47f84e8a3554ffce7111d8b898f4468bef2689 Mon Sep 17 00:00:00 2001 From: Hideki Saito Date: Sun, 14 Sep 2025 04:36:31 -0700 Subject: [PATCH 6/7] Bump NLog package version to 6.0.4 --- MyNumberNET_CLI/MyNumberNET_CLI.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MyNumberNET_CLI/MyNumberNET_CLI.csproj b/MyNumberNET_CLI/MyNumberNET_CLI.csproj index 7870078..67fa9d0 100644 --- a/MyNumberNET_CLI/MyNumberNET_CLI.csproj +++ b/MyNumberNET_CLI/MyNumberNET_CLI.csproj @@ -17,7 +17,7 @@ latest - + From 27c7b3804cb208dbc71bf159b579a00f8af5fc3d Mon Sep 17 00:00:00 2001 From: Hideki Saito Date: Fri, 26 Sep 2025 00:15:55 -0700 Subject: [PATCH 7/7] docs: Add detailed comments explaining CalculateCheckDigits array indexing - Clarifies that number[11-n] indexing is safe for 11-element arrays - Documents the algorithm processes digits right-to-left with correct weights - Addresses potential confusion about array bounds in code review --- MyNumberNET/MyNumber.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/MyNumberNET/MyNumber.cs b/MyNumberNET/MyNumber.cs index c888afb..a130121 100644 --- a/MyNumberNET/MyNumber.cs +++ b/MyNumberNET/MyNumber.cs @@ -40,9 +40,16 @@ 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."); + + // 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[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[11 - n]; if (sum % 11 <= 1)