Skip to content

Card Networks

iso8583sim supports multiple card networks with network-specific field definitions and validation rules.

Supported Networks

Network PAN Prefixes Documentation
VISA 4xxx VISA Guide
Mastercard 51-55, 2221-2720 Mastercard Guide
AMEX 34, 37 Other Networks
Discover 6011, 644-649, 65 Other Networks
JCB 3528-3589 Other Networks
UnionPay 62 Other Networks

Network Detection

Networks are automatically detected from the PAN (Primary Account Number):

from iso8583sim.core.parser import ISO8583Parser

parser = ISO8583Parser()
message = parser.parse(raw_message)

print(message.network)  # CardNetwork.VISA

Detection Rules

from iso8583sim.core.types import detect_network

detect_network("4111111111111111")    # CardNetwork.VISA
detect_network("5500000000000004")    # CardNetwork.MASTERCARD
detect_network("378282246310005")     # CardNetwork.AMEX
detect_network("6011111111111117")    # CardNetwork.DISCOVER
detect_network("3530111333300000")    # CardNetwork.JCB
detect_network("6200000000000005")    # CardNetwork.UNIONPAY

Manual Network Specification

Override auto-detection by specifying the network:

from iso8583sim.core.types import CardNetwork

# During parsing
message = parser.parse(raw_message, network=CardNetwork.MASTERCARD)

# In message object
message = ISO8583Message(
    mti="0100",
    network=CardNetwork.VISA,
    fields={...}
)

Network-Specific Fields

Each network has specific field format requirements:

from iso8583sim.core.types import NETWORK_SPECIFIC_FIELDS

# Get VISA-specific field 62 definition
visa_field_62 = NETWORK_SPECIFIC_FIELDS[CardNetwork.VISA].get(62)

Required Fields by Network

Different networks require different fields for authorization:

Network Required Fields
VISA 2, 3, 4, 11, 14, 22, 24, 25
Mastercard 2, 3, 4, 11, 22, 24, 25
AMEX 2, 3, 4, 11, 22, 25
Discover 2, 3, 4, 11, 22
JCB 2, 3, 4, 11, 22, 25
UnionPay 2, 3, 4, 11, 22, 25, 49

Network Validation

The validator checks network-specific requirements:

from iso8583sim.core.validator import ISO8583Validator
from iso8583sim.core.types import CardNetwork

validator = ISO8583Validator()

message.network = CardNetwork.VISA
errors = validator.validate_message(message)

# Checks:
# - Required fields are present
# - Network-specific field formats
# - Network-specific business rules

Common Field Differences

Field 22 - POS Entry Mode

Network Values
VISA 01x=Manual, 05x=Chip, 07x=Contactless
Mastercard 01x=Manual, 05x=Chip, 07x=Contactless

Field 39 - Response Codes

Code VISA Mastercard
00 Approved Approved
05 Do Not Honor Do Not Honor
51 Insufficient Funds Insufficient Funds
14 Invalid Card Invalid Card Number

Field 55 - EMV Data

EMV (chip card) data format is consistent across networks, but specific tags may vary in interpretation.

Next Steps