Skip to main content

Python SDK for validating banking data — built for Latin America, ready for the world.

Project description

🏦 BankKit

Python SDK for validating banking data — built for Latin America, ready for the world.

PyPI version Python 3.8+ License: MIT Tests

BankKit validates banking identifiers, account numbers, documents, and financial keys across Latin America and international standards — no API calls, no dependencies, just fast and reliable validation.


Why BankKit?

Most validation libraries are built for Europe. BankKit was built with Latin America first — covering Brazil, Mexico, Argentina, and Chile — while also supporting global standards like IBAN, SWIFT, and card numbers.


Installation

pip install bankkit

Quick Start

from bankkit import BankKit

bk = BankKit()

# Validate a PIX key
bk.validate_pix("11122233344")
# → {"valid": True, "type": "CPF", "error": None}

# Validate an IBAN
bk.validate_iban("GB82WEST12345698765432")
# → {"valid": True, "country": "United Kingdom", "code": "GB", "error": None}

# Validate a passport
bk.validate_passport("AB123456", "BR")
# → {"valid": True, "country": "BR", "format": "2 letters + 6 digits", "error": None}

Features

🇧🇷 Brazil

Function What it validates Standard
validate_cpf(cpf) CPF check digit Receita Federal
validate_cnpj(cnpj) CNPJ check digit Receita Federal
validate_pix(key) PIX key by type (CPF, CNPJ, email, phone, UUID) BACEN
validate_br_account(agency, account, code?) Bank account + optional bank lookup BACEN / COMPE

🇦🇷 Argentina

Function What it validates Standard
validate_cbu(cbu) CBU/CVU (22 digits, dual block check) BCRA

🇲🇽 Mexico

Function What it validates Standard
validate_clabe(clabe) CLABE (18 digits, weighted check digit) BANXICO

🇨🇱 Chile

Function What it validates Standard
validate_rut(rut) RUT — accepts formats like "12.345.678-5" or "K" SII

🇺🇸 United States

Function What it validates Standard
validate_routing(routing) ABA Routing Number + Federal Reserve district ABA

🇨🇦 Canada

Function What it validates Standard
validate_ca_routing(routing) Routing number (transit + institution) Payments Canada
validate_ca_account(account) Account number format Payments Canada

🌍 International

Function What it validates Standard
validate_iban(iban) IBAN format + MOD 97 checksum (80+ countries) ISO 13616
validate_swift(swift) SWIFT/BIC format + country code ISO 9362
validate_card(number) Card number + brand detection (Luhn) ISO 7812
validate_bin(bin) BIN (first 6 digits) + brand detection ISO 7812
validate_passport(number, country) Passport format by country (30+ countries) ICAO 9303

Usage Examples

Brazil

# CPF
bk.validate_cpf("111.444.777-35")
# → {"valid": True, "error": None}

# CNPJ
bk.validate_cnpj("11.222.333/0001-81")
# → {"valid": True, "error": None}

# PIX — auto-detects key type
bk.validate_pix("user@email.com")
# → {"valid": True, "type": "EMAIL", "error": None}

bk.validate_pix("+5511999999999")
# → {"valid": True, "type": "PHONE", "error": None}

# Bank account with optional bank code
bk.validate_br_account("0001", "123456", code="341")
# → {"valid": True, "bank": "Itaú Unibanco", "error": None}

Latin America

# Argentina — CBU
bk.validate_cbu("0720599600000057836902")
# → {"valid": True, "bank": None, "error": None}

# Mexico — CLABE
bk.validate_clabe("032180000118359719")
# → {"valid": True, "bank_code": "032", "bank": "IXE Banco", "error": None}

# Chile — RUT
bk.validate_rut("76.354.771-K")
# → {"valid": True, "error": None}

North America

# USA — ABA Routing Number
bk.validate_routing("021000021")
# → {"valid": True, "district": "New York", "error": None}

# Canada — Routing Number
bk.validate_ca_routing("000011001")
# → {"valid": True, "institution": "001", "bank": "Bank of Montreal (BMO)", "error": None}

# Canada — Account
bk.validate_ca_account("12345678")
# → {"valid": True, "error": None}

International

# IBAN
bk.validate_iban("GB82WEST12345698765432")
# → {"valid": True, "country": "United Kingdom", "code": "GB", "error": None}

# SWIFT/BIC
bk.validate_swift("BRASBRRJXXX")
# → {"valid": True, "bank_code": "BRAS", "country": "BR", "error": None}

# Card number
bk.validate_card("4111111111111111")
# → {"valid": True, "brand": "Visa", "error": None}

# BIN
bk.validate_bin("636368")
# → {"valid": True, "brand": "Elo", "error": None}

# Passport
bk.validate_passport("AB123456", "BR")
# → {"valid": True, "country": "BR", "format": "2 letters + 6 digits", "error": None}

bk.validate_passport("A12345678", "US")
# → {"valid": True, "country": "US", "format": "1 letter + 8 digits", "error": None}

Accessing specific fields

result = bk.validate_iban("GB82WEST12345698765432")
result["country"]  # → "United Kingdom"
result["code"]     # → "GB"
result["valid"]    # → True

Response Format

Every function returns a consistent dict:

{
  "valid": bool,        # always present
  "error": str | None,  # present when valid is False
  # + additional fields depending on the validator
}

Standards & References

BankKit follows official specifications:


Contributing

Contributions are welcome — especially for expanding country coverage and bank data.

  1. Fork the repository
  2. Create your branch (git checkout -b feat/add-colombia)
  3. Add your validator in the correct folder (validators/latam/validator_co.py)
  4. Add tests (tests/latam/test_co.py)
  5. Open a Pull Request

Looking for ideas? Check issues labeled good first issue.


License

MIT © Otavio Vicario Muraca

Project details


Download files

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

Source Distribution

bankkit-0.1.2.tar.gz (25.9 kB view details)

Uploaded Source

Built Distribution

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

bankkit-0.1.2-py3-none-any.whl (34.5 kB view details)

Uploaded Python 3

File details

Details for the file bankkit-0.1.2.tar.gz.

File metadata

  • Download URL: bankkit-0.1.2.tar.gz
  • Upload date:
  • Size: 25.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for bankkit-0.1.2.tar.gz
Algorithm Hash digest
SHA256 cb8de7f0157989e979b46d6c367cdf3f7c7e4e093e5e24d843977ff06b4c71a3
MD5 253b87a2cd3856f48c3b350964f3f99c
BLAKE2b-256 44e9da87abb05ff2715976fbccdf22a8e1389ec15fd26fca17150a842df6c3d4

See more details on using hashes here.

File details

Details for the file bankkit-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: bankkit-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 34.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for bankkit-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a68bd1b068a95baa322f010252ed04c131c51c5772222e17c4cb238de6de7a05
MD5 b7b116f9a72d295760f9fe59aade54dd
BLAKE2b-256 e99de150b947242dae7f257613ed2bbe08642a92782a28ad2aa2916b0e8b52b0

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