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.0.tar.gz (25.8 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.0-py3-none-any.whl (34.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: bankkit-0.1.0.tar.gz
  • Upload date:
  • Size: 25.8 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.0.tar.gz
Algorithm Hash digest
SHA256 703617de04a6fe0add27aa421d47a1ed5b485022b057b2ff1a3f5b46b6472619
MD5 26c8eca7e5c5e9130bb41c8f525e17df
BLAKE2b-256 e2f587a588ba0e47f6d1c5bb6fd0f7dce9264618c2ec4dbca3b68e737f1bd897

See more details on using hashes here.

File details

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

File metadata

  • Download URL: bankkit-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 34.4 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d3b1fc217c162a93b9a7df149fe7ae896f0f37f72affbf06f4daa13700b9b83b
MD5 2bce83d827b0c44822a6b2f00c642f68
BLAKE2b-256 4aa432ccd1e389e9bc8c3b32efca3ebd7972aef543b7530728166177c1b98f4e

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