65.9K
CodeProject 正在变化。 阅读更多。
Home

Cinchoo NACHA

starIconstarIconstarIconstarIconstarIcon

5.00/5 (7投票s)

2017年2月10日

CPOL

3分钟阅读

viewsIcon

25457

.NET 的简单 NACHA 驱动程序

1. 引言

ChoETL.NACHA 是一个开源的 .NET NACHA 驱动程序。它是一个基于代码的库,用于在 .NET 环境中读取和生成 NACHA 格式的文件。由于生成像 ACH 文件这样的大型固定宽度文档可能很繁琐且容易出错,因此我创建并开源了 Cinchoo NACHA。

如今,自动清算所 (ACH) 网络是资金通过银行系统电子化流动的最主要方式。它在美国使用 NACHA 文件格式来转移资金。

特点

  • 遵循标准的 NACHA 规范
  • 自动处理大部分的家政计算工作
  • 详细且强大的错误处理,让您能够快速查找和修复问题

2. 要求

对 ACH/NACHA 规范有一些基本的了解。此框架库是用 C# 编写的,使用了 .NET 4.5 / .NET Core 框架。

通过 程序包管理器控制台,使用基于 .NET 环境的 Nuget 命令安装 NACHA

.NET Framework

install-package ChoETL.NACHA

.NET Core

install-package ChoETL.NACHA.NETStandard

3. 使用代码

3.1 什么是 NACHA 文件?

ACH 文件本质上就是一个包含多行 ASCII 文本的文件,每行长度为 94 个字符。一行被称为一个“记录”。

ACH 文件中有 5 种主要的记录类型

  1. 文件头记录
  2. 批头记录
  3. PPD 入账明细记录
  4. 批尾记录
  5. 文件尾记录

有关更多详细信息,请阅读 NACHA 规范

3.2 读取 ACH 文件

如果您有一个 ACH 退回文件,您可以用 Cinchoo NACHA 库用几行代码加载它。

列表 3.2.1 NACHA 读取器示例

foreach (var r in new ChoNACHAReader("20151027B0000327P018CHK.ACH"))
    Console.WriteLine(r.ToStringEx());

在上面的代码中,创建一个 ChoNACHAReader 类的对象并将 ACH 文件传递进去。该对象会返回一个 NACHA 记录列表供您迭代。

更新:如果 ACH 文件在文件尾记录之后包含填充记录,读取器现在会将其丢弃。

在下面的示例 ACH 文件中,NACHA 读取器将不会读取最后的 4 条记录。

列表 3.2.2 NACHA 示例文件

101123456789 123456789 1702170810A094101PNC Bank               PNC Bank               Internal
5200Microsoft Inc.                      123456789 PPD                         1123456780000001
82000000000000000000000000000000000000000000123456789                          123456780000001
5200Microsoft Inc.                      123456789 PPD                         1123456780000002
82000000000000000000000000000000000000000000123456789                          123456780000002
9000002000001000000000000000000000000000000000000000000                                       
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999

3.3 生成 ACH 文件

如果您想生成 ACH 文件,您可以使用 Cinchoo NACHA 库用几行代码来完成。

列表 3.3.1 NACHA 写入器示例

ChoNACHAConfiguration config = new ChoNACHAConfiguration();
config.DestinationBankRoutingNumber = "123456789";
config.OriginatingCompanyId = "123456789";
config.DestinationBankName = "PNC Bank";
config.OriginatingCompanyName = "Microsoft Inc.";
config.ReferenceCode = "Internal Use Only.";
config.BlockingFactor = 10;

using (var nachaWriter = new ChoNACHAWriter("ACH.txt", config))
{
    using (var bw1 = nachaWriter.CreateBatch(200))
    {
        using (var entry1 = bw1.CreateDebitEntryDetail
              (20, "123456789", "1313131313", 22.505M, 
              "ID Number", "ID Name", "Desc Data"))
        {
            entry1.CreateAddendaRecord("Monthly bill");
        }
        using (var entry2 = bw1.CreateCreditEntryDetail
              (20, "123456789", "1313131313", 22.505M, 
              "ID Number", "ID Name", "Desc Data"))
        {

        }
    }
    using (var bw2 = nachaWriter.CreateBatch(200))
    {
    }
}

在上面的代码中,我们创建一个 ChoNACHAConfiguration 对象,并为其分配基本和必需的银行相关信息。使用 ACH 文件名和配置对象实例化 ChoNACHWriter 对象以开始生成过程。

然后,您可以使用 ChoNACHAWriter.CreateBatch() 方法顺序创建多个 NACHA 批次。之后,使用 ChoNACHABatchWriter 对象创建借记或贷记入账明细记录。可选地,您可以使用 ChoNACHAEntryDetailWriter 对象创建附加记录。

完成后,ACH 文件将立即生成。

3.4 ChoNACHAConfiguration 

在使用 Cinchoo NACHA 读取/写入 NACHA 文件时,以下是可用的 NACHA 配置选项。

  • FieldValueTrimOption - 解析时修剪值的选项。可能的值为 None, TrimStart, TrimEnd, Trim。
  • PriorityCode - 数字越小,处理优先级越高。目前只使用 01
  • DestinationBankRoutingNumber - 标识处理文件的银行站点的编号。
  • TurnOffDestinationBankRoutingNumber
  • OriginatingCompanyId - 用于识别收集付款的实体(称为发起者)的编号。
  • TurnOffOriginatingCompanyIdValidation
  • FileIDModifier - 唯一文件标识符。用于区分多个输入文件的代码。
  • BlockingFactor - 一个非零值,NACHAWriter 将在最后一个不完整的块中生成带有文件尾填充记录的文件。
  • FormatCode - 目前只有一个代码。输入 1。
  • DestinationBankName - 目标银行名称。
  • OriginatingCompanyName - 起始银行名称。
  • Reserved - 用于文件尾记录(类型 9)保留字段的保留字符。
  • ReferenceCode - 可选字段,可用于内部会计目的描述输入文件。
  • BatchNumber - 按顺序编号的批次。
  • BatchNumberGenerator - 自定义批次编号生成器。
  • EntryDetailTraceSource - 入账明细记录中跟踪号的来源(DestinationBankRoutingNumber/OriginatingDFI

3.5 BlockingFactor 用法示例  

如果 ChoNACHAConfiguration.BlockingFactor 指定为非零值,NACHAWriter 将在最后一个不完整的块中生成带有文件尾填充记录的文件。

以下示例显示了 BlockingFactor10 的 ACH 输出文件。

列表 3.3.2 带有填充记录的 NACHA 文件输出

101123456789 123456789 1702170810A094101PNC Bank               PNC Bank               Internal
5200Microsoft Inc.                      123456789 PPD                         1123456780000001
82000000000000000000000000000000000000000000123456789                          123456780000001
5200Microsoft Inc.                      123456789 PPD                         1123456780000002
82000000000000000000000000000000000000000000123456789                          123456780000002
9000002000001000000000000000000000000000000000000000000                                       
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999

如果 ChoNACHAConfiguration.BlockingFactor 指定为值,NACHAWriter在最后一个不完整的块中生成带有文件尾填充记录的文件。

列表 3.3.3 没有填充记录的 NACHA 文件输出

101123456789 123456789 1702170810A094101PNC Bank               PNC Bank               Internal
5200Microsoft Inc.                      123456789 PPD                         1123456780000001
82000000000000000000000000000000000000000000123456789                          123456780000001
5200Microsoft Inc.                      123456789 PPD                         1123456780000002
82000000000000000000000000000000000000000000123456789                          123456780000002
9000002000001000000000000000000000000000000000000000000 
© . All rights reserved.