Python Data Validation for Humans™ - comprehensive validation library for various data types without schema definitions
Validators for financial instruments including credit cards, banking codes, and securities identifiers. These validators implement industry-standard algorithms like Luhn checksum and provide comprehensive coverage of major financial data formats.
Validates credit card numbers using the Luhn algorithm and card-specific format rules.
def card_number(value: str, /) -> Union[Literal[True], ValidationError]:
"""
Validate generic credit card numbers using Luhn algorithm.
Parameters:
- value: Credit card number string (digits only or with spaces/dashes)
Returns:
True if valid card number, ValidationError otherwise
Uses Luhn checksum algorithm for validation.
Accepts numbers with or without separators.
"""
def visa(value: str, /) -> Union[Literal[True], ValidationError]:
"""
Validate Visa credit card numbers.
Parameters:
- value: Visa card number string
Returns:
True if valid Visa number, ValidationError otherwise
Validates length (13, 16, or 19 digits) and prefix (4).
Includes Luhn checksum validation.
"""
def mastercard(value: str, /) -> Union[Literal[True], ValidationError]:
"""
Validate Mastercard credit card numbers.
Parameters:
- value: Mastercard number string
Returns:
True if valid Mastercard number, ValidationError otherwise
Validates length (16 digits) and prefix ranges.
Includes Luhn checksum validation.
"""
def amex(value: str, /) -> Union[Literal[True], ValidationError]:
"""
Validate American Express credit card numbers.
Parameters:
- value: American Express card number string
Returns:
True if valid Amex number, ValidationError otherwise
Validates length (15 digits) and prefix (34 or 37).
Includes Luhn checksum validation.
"""
def unionpay(value: str, /) -> Union[Literal[True], ValidationError]:
"""
Validate UnionPay credit card numbers.
Parameters:
- value: UnionPay card number string
Returns:
True if valid UnionPay number, ValidationError otherwise
"""
def diners(value: str, /) -> Union[Literal[True], ValidationError]:
"""
Validate Diners Club credit card numbers.
Parameters:
- value: Diners Club card number string
Returns:
True if valid Diners number, ValidationError otherwise
Validates length (14 digits) and prefix ranges.
Includes Luhn checksum validation.
"""
def jcb(value: str, /) -> Union[Literal[True], ValidationError]:
"""
Validate JCB credit card numbers.
Parameters:
- value: JCB card number string
Returns:
True if valid JCB number, ValidationError otherwise
Validates length (16 digits) and prefix ranges.
Includes Luhn checksum validation.
"""
def discover(value: str, /) -> Union[Literal[True], ValidationError]:
"""
Validate Discover credit card numbers.
Parameters:
- value: Discover card number string
Returns:
True if valid Discover number, ValidationError otherwise
Validates length (16 digits) and prefix ranges.
Includes Luhn checksum validation.
"""
def mir(value: str, /) -> Union[Literal[True], ValidationError]:
"""
Validate Mir payment system card numbers.
Parameters:
- value: Mir card number string
Returns:
True if valid Mir number, ValidationError otherwise
Russian payment system card validation.
Includes Luhn checksum validation.
"""Validates international banking and account identifiers.
def iban(value: str, /) -> Union[Literal[True], ValidationError]:
"""
Validate International Bank Account Numbers (IBAN).
Parameters:
- value: IBAN string to validate
Returns:
True if valid IBAN, ValidationError otherwise
Validates:
- Country code (2 letters)
- Check digits (2 digits)
- Basic Bank Account Number (up to 30 alphanumeric)
- MOD-97 checksum algorithm
Accepts IBANs with or without spaces.
"""Validates financial securities identifiers used in trading and reporting.
def cusip(value: str, /) -> Union[Literal[True], ValidationError]:
"""
Validate CUSIP (Committee on Uniform Securities Identification Procedures) identifiers.
Parameters:
- value: CUSIP identifier string
Returns:
True if valid CUSIP, ValidationError otherwise
Validates:
- Length (9 characters)
- Format (6 alphanumeric + 2 alphanumeric + 1 check digit)
- Check digit algorithm
Used primarily in North American markets.
"""
def isin(value: str, /) -> Union[Literal[True], ValidationError]:
"""
Validate ISIN (International Securities Identification Number) codes.
Parameters:
- value: ISIN code string
Returns:
True if valid ISIN, ValidationError otherwise
Validates:
- Length (12 characters)
- Format (2 letter country code + 9 alphanumeric + 1 check digit)
- Luhn algorithm check digit
International standard for securities identification.
"""
def sedol(value: str, /) -> Union[Literal[True], ValidationError]:
"""
Validate SEDOL (Stock Exchange Daily Official List) codes.
Parameters:
- value: SEDOL code string
Returns:
True if valid SEDOL, ValidationError otherwise
Validates:
- Length (7 characters)
- Format (6 alphanumeric + 1 check digit)
- Check digit algorithm
Used primarily in UK and Irish markets.
"""import validators
# Credit card validation
validators.card_number('4111111111111111') # True (generic Luhn check)
validators.visa('4111111111111111') # True (Visa specific)
validators.mastercard('5555555555554444') # True (Mastercard specific)
validators.amex('378282246310005') # True (15-digit Amex)
# Card numbers with separators
validators.visa('4111-1111-1111-1111') # True
validators.visa('4111 1111 1111 1111') # True
# Different card types
validators.diners('30569309025904') # True (14-digit Diners)
validators.jcb('3530111333300000') # True (JCB)
validators.discover('6011111111111117') # True (Discover)
validators.unionpay('6200000000000005') # True (UnionPay)
validators.mir('2200000000000004') # True (Mir)
# IBAN validation
validators.iban('GB82 WEST 1234 5698 7654 32') # True (with spaces)
validators.iban('GB82WEST12345698765432') # True (without spaces)
validators.iban('DE89 3704 0044 0532 0130 00') # True (German IBAN)
# Securities identifiers
validators.cusip('037833100') # True (Apple Inc.)
validators.isin('US0378331005') # True (Apple Inc. ISIN)
validators.sedol('0263494') # True (British Petroleum)
# Invalid examples
validators.visa('4111111111111112') # ValidationError (bad check digit)
validators.iban('GB82WEST12345698765433') # ValidationError (bad checksum)
validators.cusip('037833101') # ValidationError (bad check digit)Financial validators provide detailed error information:
import validators
# Get validation details
result = validators.visa('1234567890123456')
if not result:
print(f"Validation failed: {result}")
print(f"Function: {result.func.__name__}")
print(f"Value: {result.value}")
# Raise exceptions for invalid data
try:
validators.iban('INVALID-IBAN', r_ve=True)
except validators.ValidationError as e:
print(f"IBAN validation failed: {e}")Install with Tessl CLI
npx tessl i tessl/pypi-validators