示例#1
0
        public void Return_False_For_Valid_SortCode_AccountNumber_MOD11_Exception_4_Reminder_Doesnt_Matche_GH()
        {
            //Exception 4:
            // After you have finished the check, ensure that the remainder is the same as the two-digit
            // checkdigit; the checkdigit for exception 4 is gh from the original account number

            // assign
            string sortCode  = "774110";
            string accountNo = "12335104";
            Mock <IModulusWeightRepository> modulusWeightRepository = new Mock <IModulusWeightRepository>();

            ModulusWeight modulusWeight = new ModulusWeight
            {
                SortCodeStart = 774100,
                SortCodeEnd   = 774599,
                ModCheck      = "MOD11",
                WeightU       = 5, WeightV = 8, WeightW = 6, WeightX = 2, WeightY = 3, WeightZ = 4,
                WeightA       = 2, WeightB = 1, WeightC = 2, WeightD = 1, WeightE = 2, WeightF = 1, WeightG = 7, WeightH = 8,
                Exception     = 4
            };

            modulusWeightRepository.Setup(x => x.GetBySortCode(sortCode)).Returns(modulusWeight);

            var modulusCheck = new ModulusCheck(modulusWeightRepository.Object);

            // act
            var res = modulusCheck.ModulusCheckValidation(sortCode, accountNo);

            // assert
            Assert.AreEqual(false, res.IsCheckValid);
            Assert.AreEqual(null, res.ExceptionNotProcessed);
        }
示例#2
0
        public void Return_True_For_Valid_SortCode_AccountNumber_MOD11_With_Large_And_Negative_Weights()
        {
            //Exception 4:
            // After you have finished the check, ensure that the remainder is the same as the two-digit
            // checkdigit; the checkdigit for exception 4 is gh from the original account number

            // assign
            string sortCode  = "774110";
            string accountNo = "12335104";
            Mock <IModulusWeightRepository> modulusWeightRepository = new Mock <IModulusWeightRepository>();

            ModulusWeight modulusWeight = new ModulusWeight
            {
                SortCodeStart = 774100,
                SortCodeEnd   = 774599,
                ModCheck      = "MOD11",
                WeightU       = 50, WeightV = 800, WeightW = 60, WeightX = -15, WeightY = -20, WeightZ = 400,
                WeightA       = 20, WeightB = 100, WeightC = -22, WeightD = -111, WeightE = 200, WeightF = 10, WeightG = 70, WeightH = 800,
                Exception     = 999
            };

            modulusWeightRepository.Setup(x => x.GetBySortCode(sortCode)).Returns(modulusWeight);

            var modulusCheck = new ModulusCheck(modulusWeightRepository.Object);

            // act
            var res = modulusCheck.ModulusCheckValidation(sortCode, accountNo);

            // assert
            Assert.AreEqual(true, res.IsCheckValid);
            Assert.AreEqual(999, res.ExceptionNotProcessed);
        }
示例#3
0
        public void Return_False_For_InValid_SortCode_AccountNumber_MOD10()
        {
            // assign
            string sortCode  = "774110";
            string accountNo = "12135678";
            Mock <IModulusWeightRepository> modulusWeightRepository = new Mock <IModulusWeightRepository>();

            ModulusWeight modulusWeight = new ModulusWeight
            {
                SortCodeStart = 774100,
                SortCodeEnd   = 774599,
                ModCheck      = "MOD10",
                WeightU       = 9, WeightV = 9, WeightW = 9, WeightX = 9, WeightY = 9, WeightZ = 9,
                WeightA       = 2, WeightB = 1, WeightC = 2, WeightD = 1, WeightE = 2, WeightF = 1, WeightG = 9, WeightH = 1,
                Exception     = null
            };

            modulusWeightRepository.Setup(x => x.GetBySortCode(sortCode)).Returns(modulusWeight);

            var modulusCheck = new ModulusCheck(modulusWeightRepository.Object);

            // act
            var res = modulusCheck.ModulusCheckValidation(sortCode, accountNo);

            // assert
            Assert.AreEqual(false, res.IsCheckValid);
            Assert.AreEqual(null, res.ExceptionNotProcessed);
        }
示例#4
0
        public void Return_True_For_Valid_SortCode_And_AccountNumber_DBLAL()
        {
            // assign
            string sortCode  = "499273";
            string accountNo = "12345678";
            Mock <IModulusWeightRepository> modulusWeightRepository = new Mock <IModulusWeightRepository>();

            ModulusWeight modulusWeight = new ModulusWeight
            {
                SortCodeStart = 400000,
                SortCodeEnd   = 500000,
                ModCheck      = "DBLAL",
                WeightU       = 2, WeightV = 1, WeightW = 2, WeightX = 1, WeightY = 2, WeightZ = 1,
                WeightA       = 2, WeightB = 1, WeightC = 2, WeightD = 1, WeightE = 2, WeightF = 1, WeightG = 2, WeightH = 1,
                Exception     = null
            };

            modulusWeightRepository.Setup(x => x.GetBySortCode(sortCode)).Returns(modulusWeight);

            var modulusCheck = new ModulusCheck(modulusWeightRepository.Object);

            // act
            var res = modulusCheck.ModulusCheckValidation(sortCode, accountNo);

            // assert
            Assert.AreEqual(true, res.IsCheckValid);
            Assert.AreEqual(null, res.ExceptionNotProcessed);
        }
示例#5
0
        public void Return_False_For_All_Nine_Value_Weights()
        {
            // This is to check all max values do not cause exceptions
            // assign
            string sortCode  = "999999";
            string accountNo = "99999999";
            Mock <IModulusWeightRepository> modulusWeightRepository = new Mock <IModulusWeightRepository>();

            ModulusWeight modulusWeight = new ModulusWeight
            {
                SortCodeStart = 999999,
                SortCodeEnd   = 999999,
                ModCheck      = "DBLAL",
                WeightU       = 9, WeightV = 9, WeightW = 9, WeightX = 9, WeightY = 9, WeightZ = 9,
                WeightA       = 9, WeightB = 9, WeightC = 9, WeightD = 9, WeightE = 9, WeightF = 9, WeightG = 9, WeightH = 9,
                Exception     = null
            };

            modulusWeightRepository.Setup(x => x.GetBySortCode(sortCode)).Returns(modulusWeight);

            var modulusCheck = new ModulusCheck(modulusWeightRepository.Object);

            // act
            var res = modulusCheck.ModulusCheckValidation(sortCode, accountNo);

            // assert
            Assert.AreEqual(false, res.IsCheckValid);
            Assert.AreEqual(null, res.ExceptionNotProcessed);
        }
示例#6
0
        public void Return_True_For_All_Zero_Value_Weights()
        {
            // assign
            string sortCode  = "000000";
            string accountNo = "00000000";
            Mock <IModulusWeightRepository> modulusWeightRepository = new Mock <IModulusWeightRepository>();

            ModulusWeight modulusWeight = new ModulusWeight
            {
                SortCodeStart = 100000,
                SortCodeEnd   = 100000,
                ModCheck      = "DBLAL",
                WeightU       = 0, WeightV = 0, WeightW = 0, WeightX = 0, WeightY = 0, WeightZ = 0,
                WeightA       = 0, WeightB = 0, WeightC = 0, WeightD = 0, WeightE = 0, WeightF = 0, WeightG = 0, WeightH = 0,
                Exception     = null
            };

            modulusWeightRepository.Setup(x => x.GetBySortCode(sortCode)).Returns(modulusWeight);

            var modulusCheck = new ModulusCheck(modulusWeightRepository.Object);

            // act
            var res = modulusCheck.ModulusCheckValidation(sortCode, accountNo);

            // assert
            Assert.AreEqual(true, res.IsCheckValid);
            Assert.AreEqual(null, res.ExceptionNotProcessed);
        }
示例#7
0
        public void Return_Exception_Not_Processed_For_Exception_Other_Than_4_7()
        {
            // assign
            string sortCode  = "499273";
            string accountNo = "12345678";
            Mock <IModulusWeightRepository> modulusWeightRepository = new Mock <IModulusWeightRepository>();

            ModulusWeight modulusWeight = new ModulusWeight
            {
                SortCodeStart = 400000,
                SortCodeEnd   = 500000,
                ModCheck      = "DBLAL",
                WeightU       = 2, WeightV = 1, WeightW = 2, WeightX = 1, WeightY = 2, WeightZ = 1,
                WeightA       = 2, WeightB = 1, WeightC = 2, WeightD = 1, WeightE = 2, WeightF = 1, WeightG = 2, WeightH = 1,
                Exception     = 5
            };

            modulusWeightRepository.Setup(x => x.GetBySortCode(sortCode)).Returns(modulusWeight);

            var modulusCheck = new ModulusCheck(modulusWeightRepository.Object);

            // act
            var res = modulusCheck.ModulusCheckValidation(sortCode, accountNo);

            // assert
            Assert.AreEqual(5, res.ExceptionNotProcessed.Value);
        }
        public ModulusWeight GetBySortCode(string sortCode)
        {
            string root           = HostingEnvironment.ApplicationPhysicalPath;
            string sortCodeString = string.Format("{0:000000}", sortCode);

            string filename = root + @"\ModulusCheckData.txt";

            foreach (var line in File.ReadAllLines(filename))
            {
                string startSortCode = line.Substring(0, 6);
                string endSortCode   = line.Substring(7, 6);

                if (string.Compare(sortCodeString, startSortCode) >= 0 && string.Compare(sortCodeString, endSortCode) <= 0)
                {
                    ModulusWeight modulusWeight = new ModulusWeight();

                    modulusWeight.SortCodeStart = int.Parse(line.Substring(0, 6));
                    modulusWeight.SortCodeEnd   = int.Parse(line.Substring(7, 6));
                    modulusWeight.ModCheck      = line.Substring(14, 5);
                    modulusWeight.WeightU       = int.Parse(line.Substring(19, 5));
                    modulusWeight.WeightV       = int.Parse(line.Substring(24, 5));
                    modulusWeight.WeightW       = int.Parse(line.Substring(29, 5));
                    modulusWeight.WeightX       = int.Parse(line.Substring(34, 5));
                    modulusWeight.WeightY       = int.Parse(line.Substring(39, 5));
                    modulusWeight.WeightZ       = int.Parse(line.Substring(44, 5));
                    modulusWeight.WeightA       = int.Parse(line.Substring(49, 5));
                    modulusWeight.WeightB       = int.Parse(line.Substring(54, 5));
                    modulusWeight.WeightC       = int.Parse(line.Substring(59, 5));
                    modulusWeight.WeightD       = int.Parse(line.Substring(64, 5));
                    modulusWeight.WeightE       = int.Parse(line.Substring(69, 5));
                    modulusWeight.WeightF       = int.Parse(line.Substring(74, 5));
                    modulusWeight.WeightG       = int.Parse(line.Substring(79, 5));
                    modulusWeight.WeightH       = int.Parse(line.Substring(84, 5));

                    if (line.Length >= 93)
                    {
                        modulusWeight.Exception = int.Parse(line.Substring(89, 4));
                    }
                    else
                    {
                        modulusWeight.Exception = null;
                    }

                    return(modulusWeight);
                }
            }

            return(null);
        }
        private void PostCheckResultForExceptions(ModulusWeight modulusWeight, string fullCode, ref int expectedRemainder, ref bool?isExceptionProcessed)
        {
            if (modulusWeight.Exception != null)
            {
                if (modulusWeight.Exception == 4)
                {
                    // Perform the standard modulus 11 check.
                    // After you have finished the check, ensure that the remainder is the same as the two - digit
                    // checkdigit; the checkdigit for exception 4 is gh from the original account number.

                    expectedRemainder    = int.Parse(fullCode.Substring(12, 2));
                    isExceptionProcessed = true;
                }
            }
        }
        /// <summary>
        /// Translate the matched string sortcodes to a ModulusWeight structure
        /// </summary>
        /// <param name="mwList">the list of ModulusWeight</param>
        /// <param name="sortcode">sortcode to match</param>
        /// <param name="fields">weight fields from the file</param>
        public void Translate(ref List <ModulusWeight> modulusweightList, string sortcode, string[] fields)
        {
            //need at least 2 elements
            if (fields.GetLength(0) < 2)
            {
                return;
            }

            // check the range of the sortcode
            if (!(fields[0].Equals(sortcode) | fields[1].Equals(sortcode)))
            {
                // is it outside the range, cant use this line so lets go back.
                if (Convert.ToInt32(sortcode) < Convert.ToInt32(fields[0]) | Convert.ToInt32(sortcode) > Convert.ToInt32(fields[1]))
                {
                    return;
                }
            }

            // line is valid so lets add the vlaues to the model.
            var modulusweight = new ModulusWeight
            {
                SortcodeStart = fields[0],
                SortcodeEnd   = fields[1],
                AIg           = fields[2],
                Weight        = new List <int>(),
                ExceptionRule = 0
            };

            //populate the weight
            int max = fields.Count();

            // is there an exception code
            if (max > 17)
            {
                modulusweight.ExceptionRule = Convert.ToInt16(fields[17]);
                max = 17;
            }
            for (int i = 3; i < max; i++)
            {
                modulusweight.Weight.Add(Convert.ToInt16(fields[i]));
            }

            // add it to the list.
            modulusweightList.Add(modulusweight);
        }
        private void PreCheckWeightAdjustmentsForExceptions(ModulusWeight modulusWeight, ref bool?isExceptionProcessed)
        {
            if (modulusWeight.Exception != null)
            {
                if (modulusWeight.Exception == 7)
                {
                    // Perform the check as specified, except if g = 9 zeroise weighting positions u-b.
                    if (modulusWeight.WeightG == 9)
                    {
                        modulusWeight.WeightU = 0;
                        modulusWeight.WeightV = 0;
                        modulusWeight.WeightW = 0;
                        modulusWeight.WeightX = 0;
                        modulusWeight.WeightY = 0;
                        modulusWeight.WeightZ = 0;
                        modulusWeight.WeightA = 0;
                        modulusWeight.WeightB = 0;
                    }

                    isExceptionProcessed = true;
                }
            }
        }