Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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));
        }