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.
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:
- IBAN → ISO 13616
- SWIFT/BIC → ISO 9362
- Card Numbers → ISO 7812 + Luhn Algorithm
- Passport → ICAO Doc 9303
- PIX / COMPE / ISPB → BACEN
- CLABE → BANXICO
- CBU/CVU → BCRA
- RUT → SII Chile
- ABA Routing → ABA
- CA Routing → Payments Canada
Contributing
Contributions are welcome — especially for expanding country coverage and bank data.
- Fork the repository
- Create your branch (
git checkout -b feat/add-colombia) - Add your validator in the correct folder (
validators/latam/validator_co.py) - Add tests (
tests/latam/test_co.py) - 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
703617de04a6fe0add27aa421d47a1ed5b485022b057b2ff1a3f5b46b6472619
|
|
| MD5 |
26c8eca7e5c5e9130bb41c8f525e17df
|
|
| BLAKE2b-256 |
e2f587a588ba0e47f6d1c5bb6fd0f7dce9264618c2ec4dbca3b68e737f1bd897
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d3b1fc217c162a93b9a7df149fe7ae896f0f37f72affbf06f4daa13700b9b83b
|
|
| MD5 |
2bce83d827b0c44822a6b2f00c642f68
|
|
| BLAKE2b-256 |
4aa432ccd1e389e9bc8c3b32efca3ebd7972aef543b7530728166177c1b98f4e
|