diff --git a/.github/instructions/snyk_rules.instructions.md b/.github/instructions/snyk_rules.instructions.md new file mode 100644 index 0000000..eef0634 --- /dev/null +++ b/.github/instructions/snyk_rules.instructions.md @@ -0,0 +1,14 @@ +--- +alwaysApply: true +always_on: true +trigger: always_on +applyTo: "**" +description: Snyk Security At Inception +--- + +# Project security best practices + +- Always run snyk_code_scan tool for new first party code that is generated in a Snyk-supported language. +- If any security issues are found based on newly introduced or modified code or dependencies, attempt to fix the issues using the results context from Snyk. +- Rescan the code after fixing the issues to ensure that the issues were fixed and that there are no newly introduced issues. +- Repeat this process until no new issues are found. diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..92b9b78 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,26 @@ + + + + Hideki Saito + Hideki Saito + Copyright (c) 2025 Hideki Saito + https://github.com/hsaito/MyNumber.NET/blob/master/LICENSE + https://github.com/hsaito/MyNumber.NET + latest + + + + + 1.0.7.0 + 1.0.7.0 + 1.0.7.0 + + + + + true + /_/ + $([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)')) + $(RepoRoot)=$(DeterministicSourceRoot) + + diff --git a/MyNumberNET/MyNumber.cs b/MyNumberNET/MyNumber.cs index 137749a..1283359 100644 --- a/MyNumberNET/MyNumber.cs +++ b/MyNumberNET/MyNumber.cs @@ -43,18 +43,13 @@ 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 + Array.Reverse(number); 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 + sum += (n + 1) * number[n - 1]; for (var n = 7; n < 12; n++) - sum += (n - 5) * number[11 - n]; + sum += (n - 5) * number[n - 1]; + Array.Reverse(number); if (sum % 11 <= 1) return 0; return 11 - sum % 11; diff --git a/MyNumberNET/MyNumberNET.csproj b/MyNumberNET/MyNumberNET.csproj index 953d34c..5e799e9 100644 --- a/MyNumberNET/MyNumberNET.csproj +++ b/MyNumberNET/MyNumberNET.csproj @@ -1,25 +1,12 @@  net8.0 - Hideki Saito - Hideki Saito MyNumberNET My Number Validation Library MyNumberNET MyNumberNET My Number for .NET (Library) - Copyright (c) 2019 Hideki Saito - https://github.com/hsaito/MyNumber.NET/blob/master/LICENSE - https://github.com/hsaito/MyNumber.NET - 1.0.6.0 - 1.0.6.0 - 1.0.6.0 - latest - - - - true - /_/ - $([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\..\')) - $(RepoRoot)=$(DeterministicSourceRoot) + $(MyNumberNETVersion) + $(MyNumberNETVersion) + $(MyNumberNETVersion) diff --git a/MyNumberNET_CLI/MyNumberNET_CLI.csproj b/MyNumberNET_CLI/MyNumberNET_CLI.csproj index 67fa9d0..6b6ce64 100644 --- a/MyNumberNET_CLI/MyNumberNET_CLI.csproj +++ b/MyNumberNET_CLI/MyNumberNET_CLI.csproj @@ -2,32 +2,20 @@ Exe net8.0 - Hideki Saito - Hideki Saito MyNumber My Number Validation Command Line Tool MyNumberNET_CLI MyNumberNET_CLI My Number for .NET (CLI) - Copyright (c) 2017 Hideki Saito - https://github.com/hsaito/MyNumber.NET/blob/master/LICENSE - https://github.com/hsaito/MyNumber.NET - 1.0.5.0 - 1.0.5.0 - 1.0.5.0 - latest + $(MyNumberNETCliVersion) + $(MyNumberNETCliVersion) + $(MyNumberNETCliVersion) - + - - true - /_/ - $([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\..\')) - $(RepoRoot)=$(DeterministicSourceRoot) - diff --git a/MyNumberNET_Test/MyNumberNET_Test.csproj b/MyNumberNET_Test/MyNumberNET_Test.csproj index a02ca83..59e02ed 100644 --- a/MyNumberNET_Test/MyNumberNET_Test.csproj +++ b/MyNumberNET_Test/MyNumberNET_Test.csproj @@ -2,35 +2,22 @@ net8.0 false - Hideki Saito - Hideki Saito MyNumberNet My Number Validation Unit Tests MyNumberNET_Test MyNumberNET_Test My Number for .NET (Unit Test) - Copyright (c) 2019 Hideki Saito - https://github.com/hsaito/MyNumber.NET/blob/master/LICENSE - https://github.com/hsaito/MyNumber.NET - 1.0.5.0 - 1.0.5.0 - 1.0.5.0 - latest + $(MyNumberNETTestVersion) + $(MyNumberNETTestVersion) + $(MyNumberNETTestVersion) - - - + + + - - - true - /_/ - $([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\..\')) - $(RepoRoot)=$(DeterministicSourceRoot) - diff --git a/MyNumberNET_Test/MyNumberValueTests.cs b/MyNumberNET_Test/MyNumberValueTests.cs index 9f64947..67854a3 100644 --- a/MyNumberNET_Test/MyNumberValueTests.cs +++ b/MyNumberNET_Test/MyNumberValueTests.cs @@ -25,22 +25,22 @@ public void Constructor_ValidDigits_CreatesMyNumberValue() public void Constructor_InvalidDigits_ThrowsException() { // Act & Assert - Assert.ThrowsException(() => new MyNumberValue(_invalidMyNumber)); + Assert.ThrowsExactly(() => new MyNumberValue(_invalidMyNumber)); } [TestMethod] public void Constructor_NullDigits_ThrowsException() { // Act & Assert - Assert.ThrowsException(() => new MyNumberValue(null)); + Assert.ThrowsExactly(() => new MyNumberValue(null)); } [TestMethod] public void Constructor_WrongLength_ThrowsException() { // Act & Assert - Assert.ThrowsException(() => new MyNumberValue(new int[10])); - Assert.ThrowsException(() => new MyNumberValue(new int[13])); + Assert.ThrowsExactly(() => new MyNumberValue(new int[10])); + Assert.ThrowsExactly(() => new MyNumberValue(new int[13])); } [TestMethod] @@ -72,9 +72,9 @@ public void FromFirstElevenDigits_ValidDigits_CreatesMyNumberValue() public void FromFirstElevenDigits_InvalidLength_ThrowsException() { // Act & Assert - Assert.ThrowsException(() => + Assert.ThrowsExactly(() => MyNumberValue.FromFirstElevenDigits(new int[10])); - Assert.ThrowsException(() => + Assert.ThrowsExactly(() => MyNumberValue.FromFirstElevenDigits(null)); } @@ -154,7 +154,7 @@ public void Parse_ValidString_ReturnsMyNumberValue() public void Parse_InvalidString_ThrowsException() { // Act & Assert - Assert.ThrowsException(() => MyNumberValue.Parse("invalid")); + Assert.ThrowsExactly(() => MyNumberValue.Parse("invalid")); } [TestMethod] @@ -204,7 +204,7 @@ public void ToString_InvalidFormat_ThrowsException() var myNumber = new MyNumberValue(_validMyNumber); // Act & Assert - Assert.ThrowsException(() => myNumber.ToString("X")); + Assert.ThrowsExactly(() => myNumber.ToString("X")); } [TestMethod] @@ -311,14 +311,14 @@ public void ExplicitConversion_FromString_CreatesMyNumberValue() public void ExplicitConversion_FromInvalidIntArray_ThrowsException() { // Act & Assert - Assert.ThrowsException(() => (MyNumberValue)_invalidMyNumber); + Assert.ThrowsExactly(() => (MyNumberValue)_invalidMyNumber); } [TestMethod] public void ExplicitConversion_FromInvalidString_ThrowsException() { // Act & Assert - Assert.ThrowsException(() => (MyNumberValue)"invalid"); + Assert.ThrowsExactly(() => (MyNumberValue)"invalid"); } [TestMethod] @@ -343,7 +343,7 @@ public void Digits_UninitializedValue_ThrowsException() var myNumber = new MyNumberValue(); // Act & Assert - Assert.ThrowsException(() => myNumber.Digits); + Assert.ThrowsExactly(() => myNumber.Digits); } [TestMethod] @@ -353,7 +353,7 @@ public void ToString_UninitializedValue_ThrowsException() var myNumber = new MyNumberValue(); // Act & Assert - Assert.ThrowsException(() => myNumber.ToString()); + Assert.ThrowsExactly(() => myNumber.ToString()); } } -} \ No newline at end of file +}