@@ -16,11 +16,13 @@ public class MyNumber
1616 /// <returns>Whether it is a valid "My Number" sequence</returns>
1717 public static bool VerifyNumber ( int [ ] number )
1818 {
19+ if ( number == null )
20+ throw new MyNumberMalformedException ( "Input array is null." ) ;
1921 if ( number . Length != 12 )
2022 throw new MyNumberMalformedException ( "Malformed sequence. Must be 12 digits." ) ;
21-
23+ if ( Array . Exists ( number , n => n < 0 || n > 9 ) )
24+ throw new MyNumberMalformedException ( "All digits must be between 0 and 9." ) ;
2225 var checkDigit = CalculateCheckDigits ( Truncate ( number ) ) ;
23-
2426 return number [ 11 ] == checkDigit ;
2527 }
2628
@@ -32,22 +34,19 @@ public static bool VerifyNumber(int[] number)
3234 /// <returns>Check digit for the "My Number" supplied</returns>
3335 public static int CalculateCheckDigits ( int [ ] number )
3436 {
37+ if ( number == null )
38+ throw new MyNumberMalformedException ( "Input array is null." ) ;
3539 if ( number . Length != 11 )
3640 throw new MyNumberMalformedException ( "Malformed sequence. Must be 11 digits." ) ;
37-
38- // They count their digits high to low, so reorder it
41+ if ( Array . Exists ( number , n => n < 0 || n > 9 ) )
42+ throw new MyNumberMalformedException ( "All digits must be between 0 and 9." ) ;
3943 Array . Reverse ( number ) ;
40-
4144 var sum = 0 ;
4245 for ( var n = 1 ; n < 7 ; n ++ )
43- // From digit 1 to 6, sum is n+1
4446 sum += ( n + 1 ) * number [ n - 1 ] ;
45-
4647 for ( var n = 7 ; n < 12 ; n ++ )
47- // From digit 7 to 11, sum is n-5
4848 sum += ( n - 5 ) * number [ n - 1 ] ;
4949 Array . Reverse ( number ) ;
50- // Calculate against MOD
5150 if ( sum % 11 <= 1 )
5251 return 0 ;
5352 return 11 - sum % 11 ;
@@ -61,8 +60,7 @@ public int[] GenerateRandomNumber()
6160 {
6261 var result = new int [ 12 ] ;
6362 for ( var i = 0 ; i < 11 ; i ++ )
64- result [ i ] = _random . Next ( 0 , 9 ) ;
65-
63+ result [ i ] = _random . Next ( 0 , 10 ) ;
6664 result [ 11 ] = CalculateCheckDigits ( Truncate ( result ) ) ;
6765 return result ;
6866 }
@@ -75,6 +73,8 @@ public int[] GenerateRandomNumber()
7573 /// <returns></returns>
7674 private static int [ ] Truncate ( IReadOnlyList < int > number )
7775 {
76+ if ( number == null )
77+ throw new MyNumberMalformedException ( "Input array is null." ) ;
7878 if ( number . Count < 11 || number . Count > 12 )
7979 throw new MyNumberMalformedException ( "Malformed sequence. Must be 11 or 12 digits." ) ;
8080 var result = new int [ 11 ] ;
@@ -85,15 +85,15 @@ private static int[] Truncate(IReadOnlyList<int> number)
8585
8686 #region Exceptions
8787
88- private class MyNumberException : Exception
88+ public class MyNumberException : Exception
8989 {
90- protected MyNumberException ( string message )
90+ public MyNumberException ( string message )
9191 : base ( message )
9292 {
9393 }
9494 }
9595
96- private class MyNumberMalformedException : MyNumberException
96+ public class MyNumberMalformedException : MyNumberException
9797 {
9898 public MyNumberMalformedException ( string message )
9999 : base ( message )
0 commit comments