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.1.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.1-py3-none-any.whl (34.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: bankkit-0.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 a5a766fc83eb4c411952b0e74b17c5dc53ca32c83cc8e4d306071d4c9a6b3f41
MD5 2318667bfee978577539fb2a249d76ad
BLAKE2b-256 4e69f98f18d9cdab3e2ff2b93b580eb6826d238240cffd5423e03f867b614bd7

See more details on using hashes here.

File details

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

File metadata

  • Download URL: bankkit-0.1.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3b7a29006b8a23fdac2b3bb70466255b5d200183cdd74720834fa2be24e178dd
MD5 97d22509d8d87812256e42000efccf2e
BLAKE2b-256 fde1428db19221951144e4b6f1b633652ad3129d122ff8e5344a22444201c9c1

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