Skip to main content

Validate/generate IBANs and BICs

Project description

https://img.shields.io/pypi/v/schwifty.svg?style=flat-square https://img.shields.io/travis/figo-connect/schwifty/master.svg?style=flat-square https://img.shields.io/pypi/l/schwifty.svg?style=flat-square

Gotta get schwifty with your IBANs

Schwifty is a Python library for working with BICs and IBANs. It allows you to

  • validate check-digits and the country specific format of IBANs

  • validate format and country codes from BICs

  • generate BICs from bank-codes (works for Germany for now)

  • generate IBANs from country-code, bank-code and account-number.

  • access all relevant components as attributes

Usage

IBAN

Let’s jump right into it:

>>> from schwifty import IBAN
>>> iban = IBAN('DE89 3704 0044 0532 0130 00')
>>> iban.compact
'DE89370400440532013000'
>>> iban.formatted
'DE89 3704 0044 0532 0130 00'
>>> iban.country_code
'DE'
>>> iban.bank_code
'37040044'
>>> iban.account_code
'0532013000'
>>> iban.length
22
>>> iban.bic
<BIC=COBADEFFXXX>

So far so good. So you are able to create an IBAN-object and to access all relevant components of the IBAN as properties. As you can see on the last line, you can also get hold of the BIC number associated to the bank-code of the IBAN. This currently only works for IBANs of german banks.

Behind the scenes the IBAN has been validated at the moment of instantiation. With respect to ISO 13616 compliance it is checked if the format of the account-code, the bank-code and possibly the branch-code have the correct country-specific format. Whenever you pass an invalid IBAN to the __init__-method, you’ll get a ValueError with an appropriate error message.

>>> IBAN('DX89 3704 0044 0532 0130 00')
...
ValueError: Unknown country-code DX

>>> IBAN('DE99 3704 0044 0532 0130 00')
...
ValueError: Invalid checksum digits

But what if you wan’t to generate an IBAN from a bank-code and the account-code? Use the generate-classmethod!

>>> iban = IBAN.generate('DE', bank_code='10010010', account_code='12345')
<IBAN=DE40100100100000012345>
>>> iban.checksum_digits
'40'

Notice that even that the account-code has less digits than required (in Germany accounts should be 10 digits long), zeros have been added at the correct location. Additionally the checksum digits have been calculated, which is good.

BIC

Besides the IBAN there is the Business Identifier Code (BIC). It is a unique identification code for both financial and non-financial institutes. Schwifty also has a BIC-object which more or less has the same interface than the IBAN-object.

>>> from schwifty import BIC
>>> bic = BIC('PBNKDEFFXXX')
>>> bic.bank_code
'PBNK'
>>> bic.branch_code
'XXX'
>>> bic.country_code
'DE'
>>> bic.location_code
'FF'
>>> bic.country_bank_code
'86010090'

The country_bank_code is the country specific bank code as you can find it in the IBAN. This mapping is currently only available for German BICs.

The BIC-object also does some basic validation on instantiation and raises a ValueError if the country-code, the BIC´s length is invalid or if the structure doesn’t match the ISO 9362 specification.

>>> BIC('PBNKDXFFXXX')
...
ValueError: Invalid country code DX
>>> BIC('PBNKDXFFXXXX')
...
ValueError: Invalid length 12
>>> BIC('PBN1DXFFXXXX')
...
ValueError: Invalid structure PBN1DXFFXXXX

If Schwifty´s internal registry contains the BICs for your country (this again currently only works for Germany), then you can use the exists-property to check that the BIC is registered.

Installation

To install Schwifty, simply:

$ pip install schwifty

Name

Since swift and swiftly were already taken by the OpenStack-project, but we somehow wanted to point out the connection to SWIFT, Rick and Morty came up with the idea to name the project schwifty.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

schwifty-2.0.1.tar.gz (113.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

schwifty-2.0.1-py2.py3-none-any.whl (105.9 kB view details)

Uploaded Python 2Python 3

File details

Details for the file schwifty-2.0.1.tar.gz.

File metadata

  • Download URL: schwifty-2.0.1.tar.gz
  • Upload date:
  • Size: 113.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for schwifty-2.0.1.tar.gz
Algorithm Hash digest
SHA256 6a8a8b92fc588a10455b79c6fe24003368c35e72444e17d724553c03719dd8d3
MD5 7318c4bd238b0fe6cc3caef390755e65
BLAKE2b-256 5838d8d80d87149c0661c5356ba4254a7599e864484fe3d46f38a2880ed05883

See more details on using hashes here.

File details

Details for the file schwifty-2.0.1-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for schwifty-2.0.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 effb5e90f8afb7c19def14a78eb126ca56c6a39be4a7cee53d67470b3ae00b4d
MD5 6b365bdf16393018e4792d0826e71e93
BLAKE2b-256 9c81d571bd6b7a3a3add114bf1d065a69ab742f267ac964794ed23b0b354c5c3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page