public static int GetNumberOfLines(AchFile file) { var lines = 1; // file header foreach (var batch in file.Batches) { lines += 2; // batch header + control lines += batch.Entries.Count; } lines += 1; // file control return(lines); }
internal FileControl(AchFile file) { BatchCount = file.Batches.Count; EntryCount = file.Batches.Sum(batch => batch.Entries.Count); TotalCredits = file.Batches.Sum(batch => batch.Control.TotalCredits); NumberOfCredits = file.Batches.Sum(batch => batch.Control.NumberOfCredits); TotalDebits = file.Batches.Sum(batch => batch.Control.TotalDebits); NumberOfDebits = file.Batches.Sum(batch => batch.Control.NumberOfDebits); BlockCount = (int)Math.Ceiling(AchFile.GetNumberOfLines(file) / 10m); EntryHash = CalculateEntryHash(file); }
public static string CalculateEntryHash(AchFile file) { var sum = file.Batches.SelectMany(batch => batch.Entries) .Select(entry => entry.ReceivingDfiIdentification) .Select(routingNumber => routingNumber.Substring(0, 8)) .Select(decimal.Parse) .Sum(); //IF THE SUM OF THE RDFI TRANSIT ROUTING NUMBERS IS A //NUMBER GREATER THAN TEN DIGITS, REMOVE OR DROP THE //NUMBER OF DIGITS FROM THE LEFT SIDE OF THE NUMBER //UNTIL ONLY TEN DIGITS REMAIN. FOR EXAMPLE, IF THE SUM //OF THE TRANSIT ROUTING NUMBERS IS 234567898765, //REMOVE THE “23” FOR A HASH OF 4567898765. var last10 = sum % 10000000000; return(last10.ToString(CultureInfo.InvariantCulture)); }