Skip to content

Commit f3b6ff4

Browse files
authored
Merge pull request #107 from hsaito/develop
Update NLog and testing frameworks, enhance input validation
2 parents 64add57 + 27c7b38 commit f3b6ff4

5 files changed

Lines changed: 34 additions & 9 deletions

File tree

MyNumberNET.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyNumberNET_CLI", "MyNumber
88
EndProject
99
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MyNumberNET_Test", "MyNumberNET_Test\MyNumberNET_Test.csproj", "{0EE82E05-BD36-4024-BC61-A9B56E97E6B8}"
1010
EndProject
11+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyNumberNET_ApiServer", "MyNumberNET_ApiServer\MyNumberNET_ApiServer.csproj", "{5ABBBF4C-8CD9-405F-B2B4-2CD71A97CE1B}"
12+
EndProject
1113
Global
1214
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1315
Debug|Any CPU = Debug|Any CPU
@@ -26,6 +28,10 @@ Global
2628
{0EE82E05-BD36-4024-BC61-A9B56E97E6B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
2729
{0EE82E05-BD36-4024-BC61-A9B56E97E6B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
2830
{0EE82E05-BD36-4024-BC61-A9B56E97E6B8}.Release|Any CPU.Build.0 = Release|Any CPU
31+
{5ABBBF4C-8CD9-405F-B2B4-2CD71A97CE1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
32+
{5ABBBF4C-8CD9-405F-B2B4-2CD71A97CE1B}.Debug|Any CPU.Build.0 = Debug|Any CPU
33+
{5ABBBF4C-8CD9-405F-B2B4-2CD71A97CE1B}.Release|Any CPU.ActiveCfg = Release|Any CPU
34+
{5ABBBF4C-8CD9-405F-B2B4-2CD71A97CE1B}.Release|Any CPU.Build.0 = Release|Any CPU
2935
EndGlobalSection
3036
GlobalSection(SolutionProperties) = preSolution
3137
HideSolutionNode = FALSE

MyNumberNET/MyNumber.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,18 @@ public static int CalculateCheckDigits(int[] number)
4343
throw new MyNumberMalformedException("Malformed sequence. Must be 11 digits.");
4444
if (Array.Exists(number, n => n < 0 || n > 9))
4545
throw new MyNumberMalformedException("All digits must be between 0 and 9.");
46-
Array.Reverse(number);
46+
47+
// Calculate check digit using the official My Number algorithm
48+
// Process digits from right to left with specific weights
49+
// Array indexing: number[11-n] safely accesses indices 10,9,8,...,0 for n=1,2,3,...,11
50+
// This avoids Array.Reverse() while maintaining correct algorithm behavior
4751
var sum = 0;
52+
// First loop: rightmost 6 digits (indices 10,9,8,7,6,5) with weights 2,3,4,5,6,7
4853
for (var n = 1; n < 7; n++)
49-
sum += (n + 1) * number[n - 1];
54+
sum += (n + 1) * number[11 - n];
55+
// Second loop: leftmost 5 digits (indices 4,3,2,1,0) with weights 2,3,4,5,6
5056
for (var n = 7; n < 12; n++)
51-
sum += (n - 5) * number[n - 1];
52-
Array.Reverse(number);
57+
sum += (n - 5) * number[11 - n];
5358
if (sum % 11 <= 1)
5459
return 0;
5560
return 11 - sum % 11;

MyNumberNET_ApiServer/Controllers/MyNumberController.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@ public class MyNumberController : ControllerBase
1818
[HttpPost("verify")]
1919
public ActionResult<bool> Verify([FromBody] int[] number)
2020
{
21+
// Input validation before calling business logic
22+
if (number == null)
23+
return BadRequest("Input array is null.");
24+
if (number.Length != 12)
25+
return BadRequest("Malformed sequence. Must be 12 digits.");
26+
if (number.Any(n => n < 0 || n > 9))
27+
return BadRequest("All digits must be between 0 and 9.");
2128
try
2229
{
2330
bool isValid = MyNumber.VerifyNumber(number);
@@ -78,6 +85,13 @@ public ActionResult<MyNumberValue> Create([FromBody] int[] number)
7885
[HttpPost("checkdigit")]
7986
public ActionResult<int> CheckDigit([FromBody] int[] number)
8087
{
88+
// Input validation before calling business logic
89+
if (number == null)
90+
return BadRequest("Input array is null.");
91+
if (number.Length != 11)
92+
return BadRequest("Malformed sequence. Must be 11 digits.");
93+
if (number.Any(n => n < 0 || n > 9))
94+
return BadRequest("All digits must be between 0 and 9.");
8195
try
8296
{
8397
int checkDigit = MyNumber.CalculateCheckDigits(number);

MyNumberNET_CLI/MyNumberNET_CLI.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<LangVersion>latest</LangVersion>
1818
</PropertyGroup>
1919
<ItemGroup>
20-
<PackageReference Include="NLog" Version="5.2.0" />
20+
<PackageReference Include="NLog" Version="6.0.4" />
2121
<PackageReference Include="System.Console" Version="4.3.1" />
2222
<PackageReference Include="System.Net.Sockets" Version="4.3.0" />
2323
</ItemGroup>

MyNumberNET_Test/MyNumberNET_Test.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
<LangVersion>latest</LangVersion>
1818
</PropertyGroup>
1919
<ItemGroup>
20-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
21-
<PackageReference Include="MSTest.TestAdapter" Version="3.10.2" />
22-
<PackageReference Include="MSTest.TestFramework" Version="3.10.2" />
23-
<PackageReference Include="xunit" Version="2.4.2" />
20+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
21+
<PackageReference Include="MSTest.TestAdapter" Version="3.10.4" />
22+
<PackageReference Include="MSTest.TestFramework" Version="3.10.4" />
23+
<PackageReference Include="xunit" Version="2.9.3" />
2424
<!-- Other test dependencies -->
2525
</ItemGroup>
2626
<ItemGroup>

0 commit comments

Comments
 (0)