Skip to content

VISA

VISA-specific field definitions and requirements for iso8583sim.

Network Detection

VISA cards are detected by PAN prefix: - Starts with 4 - 13, 16, or 19 digits

from iso8583sim.core.types import detect_network, CardNetwork

network = detect_network("4111111111111111")
assert network == CardNetwork.VISA

Required Fields

VISA authorization requests require:

Field Name Format
2 PAN LLVAR (13-19 digits)
3 Processing Code n6
4 Amount n12
11 STAN n6
14 Expiration Date n4 (YYMM)
22 POS Entry Mode n3
24 NII n3
25 POS Condition Code n2

VISA-Specific Fields

Field 62 - VISA Private Data

Reserved for VISA-specific data elements:

message.fields[62] = "01" + "0123456789"  # Example format

Field 63 - VISA Additional Data

Additional transaction data:

Sub-element Description
01 Network ID
02 Settlement Basis
03 Transaction ID

POS Entry Modes (Field 22)

Value Description
010 Manual/Key Entry (No PIN)
011 Manual/Key Entry (PIN Entry)
051 Chip Card (No PIN)
052 Chip Card (PIN Entry)
071 Contactless (No PIN)
072 Contactless (PIN Entry)
901 Magnetic Stripe (No PIN)
902 Magnetic Stripe (PIN Entry)

Response Codes (Field 39)

Code Description
00 Approved
01 Refer to Issuer
05 Do Not Honor
12 Invalid Transaction
14 Invalid Card Number
41 Lost Card - Pick Up
43 Stolen Card - Pick Up
51 Insufficient Funds
54 Expired Card
55 Incorrect PIN
61 Exceeds Withdrawal Limit
65 Activity Count Limit Exceeded
75 PIN Tries Exceeded
91 Issuer Unavailable

Example: VISA Authorization Request

from iso8583sim.core.types import ISO8583Message, CardNetwork
from iso8583sim.core.builder import ISO8583Builder

message = ISO8583Message(
    mti="0100",
    network=CardNetwork.VISA,
    fields={
        0: "0100",
        2: "4111111111111111",      # VISA PAN
        3: "000000",                # Purchase
        4: "000000010000",          # $100.00
        7: "1225120000",            # Dec 25, 12:00:00
        11: "123456",               # STAN
        14: "2512",                 # Exp Dec 2025
        22: "051",                  # Chip, no PIN
        24: "100",                  # NII
        25: "00",                   # Normal transaction
        41: "TERM0001",
        42: "MERCHANT123456 ",
    }
)

builder = ISO8583Builder()
raw = builder.build(message)

Example: VISA EMV Authorization

from iso8583sim.demo import generate_emv_auth

emv_message = generate_emv_auth(
    pan="4111111111111111",
    amount=25000,
    cryptogram="1234567890ABCDEF",
)

# Field 55 contains EMV data
print(emv_message.fields.get(55))

VISA Base I/II

VISA uses two processing environments:

  • Base I: Authorization and clearing
  • Base II: Settlement and reconciliation

iso8583sim focuses on Base I authorization messages.

Validation

VISA-specific validation:

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

validator = ISO8583Validator()
message.network = CardNetwork.VISA

errors = validator.validate_message(message)
# Validates:
# - All VISA required fields present
# - PAN passes Luhn check
# - Field formats match VISA specs