💴

Pythonで国内の銀行コードと支店コードを取得する

2022/02/05に公開

WEBアプリケーションの中には、銀行口座の引き落としや振込などのために、銀行口座を入力してもらう必要があると思います。

ユーザーに自身の銀行口座を入力してもらう際には、銀行名や支店名が間違っていないかなどのバリデーションチェックなどが必要だと思います。

アプリケーションによっては銀行コードと支店コードを入力させて、その銀行コードと支店コードが本当に存在するか。
また、入力した銀行コードと支店コードをもとに自動で銀行名と支店名を取得して自動入力させるといった機能があるとより便利です。

そのためにも全ての銀行コードと支店コードが必要になりますが、どこからそれを取得するかに悩みます。
以下のようなサイトがあるので、そこからスクレイピングなどをしてリストを作るか。それでは時間がかかります。

https://zengin.ajtw.net/

DjangoなどPythonのWEBフレームワークなどで開発をしたいとして、いいライブラリが無いかと探してみると、zengin-pyという非常に便利なライブラリがあります。

https://github.com/zengin-code/zengin-py

このライブラリは定期的にCIを回して、銀行コードと支店コードを更新しているため、常に最新の状態を保っています。

ライブラリのインストール

まずは以下のpipインストールでzengin-pyをインストールします。

$ pip install zengin_code

全ての銀行コードを取得する

全ての銀行の銀行コードと銀行名を表示させるコードです。
ここでは全ての銀行コード、銀行名、銀行名のひらがなを表示させています。

from zengin_code import Bank
for code in Bank.all:
    bank = Bank[code]

    # 銀行コードと銀行名を出力
    print({
        "code": code,
        "name": bank.name,
        "kana": bank.kana
    })

Bankクラスが持つフィールドは以下の6つになります。

  • branches : 支店情報が入ったOrderedDictオブジェクト
  • code : 銀行コード
  • name : 銀行名
  • hira : 銀行名(ひらがな)
  • kana : 銀行名(カタカナ)
  • roma : 銀行名(ローマ字)
# みずほ銀行
code = "0001"
bank = Bank[code]

print(bank.code)
print(bank.hira)
print(bank.kana)
print(bank.name)
print(bank.roma)

ここではみずほ銀行の銀行コードを指定して、フィールドを全て表示させている例になります。

0001
みずほ
ミズホ
みずほ
mizuho

指定した銀行コードの支店コードを取得

銀行名は取れたので、その銀行名の支店情報を全て取得してみます。
ここの例では上記同様にみずほ銀行を例にします。

from zengin_code import Bank

bank_code = "0001"  # みずほ銀行

bank = Bank[bank_code]
if bank:
    branches = bank.branches
    for code in branches:
        branch = branches[code]

        print({
            "code": code,
            "bank": branch.bank.name,
            "name": branch.name,
            "hira": branch.hira,
            "kana": branch.kana,
            "roma": branch.roma,
        })

Branchクラスが持つフィールドは以下の6つになります。

  • bank : 所属している銀行のBankオブジェクト
  • code : 支店コード
  • name : 支店名
  • hira : 支店名(ひらがな)
  • kana : 支店名(カタカナ)
  • roma : 支店名(ローマ字)

上記のコードを実行してみると以下のように支店情報の一覧が表示されるはずです。

{'code': '001', 'bank': 'みずほ', 'name': '東京営業部', 'hira': 'とうきよう', 'kana': 'トウキヨウ', 'roma': 'toukiyou'}
{'code': '004', 'bank': 'みずほ', 'name': '丸の内中央', 'hira': 'まるのうちちゆうおう', 'kana': 'マルノウチチユウオウ', 'roma': 'marunouchichiyuuou'}
......

銀行名を元に全ての支店名を取得する(応用編)

少し応用編です。
銀行コードではなく、銀行名を入力して、それを元に全ての支店名と銀行の情報を取得するコードです。
更に少し応用すれば自動入力をするためのサジェスト機能も作れると思います。

from zengin_code import Bank

bank_name = "みずほ"  # みずほ銀行

branches = []
for code in Bank.all:
    bank = Bank[code]

    if ((bank.name == bank_name) or \
        (bank.hira == bank_name) or \
        (bank.kana == bank_name) or \
        (bank.roma == bank_name)
    ):
        branches = bank.branches
        break

if branches:
    print("bank name", bank.name)
    for code in branches:
        branch = branches[code]
        # print("branch", branch)

        # 支店コードと支店名を出力
        print({
            "code": code,
            "name": branch.name,
            "hira": branch.hira,
            "kana": branch.kana,
            "roma": branch.roma,
        })

bank_nameには銀行名を入れます。
条件分岐式にはひらがな、カタカナ、ローマ字のどれかに完全一致したら、ループを抜け出して支店情報を取得するようにします。

    if ((bank.name == bank_name) or \
        (bank.hira == bank_name) or \
        (bank.kana == bank_name) or \
        (bank.roma == bank_name)
    ):
        branches = bank.branches
        break

実行すると以下のように表示されるはずです。

bank name みずほ
{'code': '001', 'name': '東京営業部', 'hira': 'とうきよう', 'kana': 'トウキヨウ', 'roma': 'toukiyou'}
{'code': '004', 'bank': 'みずほ', 'name': '丸の内中央', 'hira': 'まるのうちちゆうおう', 'kana': 'マルノウチチユウオウ', 'roma': 'marunouchichiyuuou'}
......

参考資料

https://kumano-te.com/activities/python-zengin-code

Discussion