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); }
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); }
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); }
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); }
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); }
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); }
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; } } }