4
1

More than 3 years have passed since last update.

総合振込の全銀フォーマットファイルを作成する方法(Ruby)

Last updated at Posted at 2021-05-13

総合振込で使用する「全銀フォーマット(全銀協規定形式)」のファイル作成方法をまとめてみました。
全銀フォーマットはどの銀行も似通っているかと思いますが、実装する際は必ず該当銀行の資料を読み込む事をお勧めします。

※ 下記は GMOあおぞらネット銀行 のフォーマットになります。だいぶ愚直に書いた例です。

File.open("payout-example.txt", "w", encoding: "Shift_JIS") { |f|
  # 1. ヘッダー・レコード
  h_01 = 1                           # データ区分(固定値)
  h_02 = 21                          # 種別コード(固定値)
  h_03 = 0                           # コード区分(固定値)
  h_04 = 9999999999                  # 振込依頼人コード(固定値)
  h_05 = "#{振込依頼人名}".ljust(40)   # 振込依頼人名
  h_06 = Date.today.strftime("%m%d") # 振込実施日
  h_07 = "0310"                      # 仕向銀行番号(固定値)
  h_08 = "ジーエムオーアオゾラネツト"              # 仕向銀行名(固定値)
  h_09 = "#{仕向支店番号}"             # 仕向支店番号
  h_10 = "#{仕向支店名}".ljust(15)     # 仕向支店名
  h_11 = 1                           # 預金種目(依頼人)(固定値)
  h_12 = "#{口座番号}"                 # 口座番号(依頼人)
  h_13 = "".ljust(17)                # ダミー

  f.write("#{h_01}#{h_02}#{h_03}#{h_04}#{h_05}#{h_06}#{h_07}#{h_08}#{h_09}#{h_10}#{h_11}#{h_12}#{h_13}\r\n")

  # 2. データ・レコード
  payouts = ...
  payouts.each do |payout|
    d_01 = 2                                      # データ区分(固定値)
    d_02 = "#{payout.被仕向銀行番号}".rjust(4, "0") # 被仕向銀行番号
    d_03 = "".ljust(15)                           # 被仕向銀行名
    d_04 = "#{payout.被仕向支店番号}".rjust(3, "0") # 被仕向支店番号
    d_05 = "".ljust(15)                           # 被仕向支店名
    d_06 = "".ljust(4)                            # 統一手形交換所番号(固定値)
    d_07 = 1                                      # 預金種目
    d_08 = "#{payout.口座番号}".rjust(7, "0")      # 口座番号
    d_09 = "#{payout.受取人名}".ljust(30)          # 受取人名
    d_10 = "#{payout.振込金額}".rjust(10, "0")     # 振込金額
    d_11 = 1                                      # 新規コード
    d_12 = "".ljust(10)                           # 顧客コード1
    d_13 = "".ljust(10)                           # 顧客コード2
    d_14 = "".ljust(1)                            # 振込指定区分
    d_15 = "".ljust(1)                            # 識別表示
    d_16 = "".ljust(7)                            # ダミー

    f.write("#{d_01}#{d_02}#{d_03}#{d_04}#{d_05}#{d_06}#{d_07}#{d_08}#{d_09}#{d_10}#{d_11}#{d_12}#{d_13}#{d_14}#{d_15}#{d_16}\r\n")
  end

  # 3. トレーラ・レコード
  t_01 = 8                                         # データ区分(固定値)
  t_02 = payouts.count.to_s.rjust(6, "0")          # 合計件数
  t_03 = payouts.sum(:振込金額).to_s.rjust(12, "0") # 合計金額
  t_04 = "".ljust(101)                             # ダミー

  f.write("#{t_01}#{t_02}#{t_03}#{t_04}\r\n")

  # 4. エンド・レコード
  e_01 = 9             # データ区分(固定値)
  e_02 = "".ljust(119) # ダミー

  f.write("#{e_01}#{e_02}\r\n")
}

参照

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1