Universal ISO 8583 simulator

One simulator. Any ISO 8583 interface.

Describe the message format you actually have to talk to, save your cards and keys once, and drive the link from either end. FlexSim is not built around one scheme — the specification is data you edit, not code someone else compiled.

Windows, macOS and Linux. No installer — unzip and run.

Message inspector MTI 0200

Primary bitmap

723C4480 20C09200

Built from the fields ticked in the test case

DE-2Primary account numberfrom saved card
DE-3Processing code000000
DE-4Amount, transaction000000015000
DE-11Systems trace audit numberauto
DE-35Track 2 datacomposed
DE-52PIN blockcalculated
DE-55ICC datacalculated
0210  DE-39 00  Rules passed 41 ms
AnyISO 8583 interface
2Modes: acquirer and issuer
3Framing header lengths
5Platform builds

Capabilities

Everything the exchange needs, in one window

Not a message builder with a socket bolted on. FlexSim covers the format, the card data, the calculation, the connection, the checking and the record — because a test that is missing any one of those is not a test.

Universal

Any ISO 8583 interface

Nothing is hardcoded to one network. Point FlexSim at a switch, an issuer host, an acquirer front end or a test harness, and describe what that link expects.

Specifications

Any scheme, edited not compiled

Build the message format in the app: fields, lengths, encodings, bitmap format, application headers and nested subfields. Switch between specifications without restarting, and rename one without orphaning a thing.

Modes

Acquirer and issuer modes

Answer requests as the issuer host, or send them as the acquirer. The same test case definitions serve both directions — it is a setting on the case, not a separate tool.

Validation

A rule set per test case

Say what a correct reply looks like — per field, per case — and let the run decide pass or fail instead of you reading hex. Checking can be switched off per case without losing the rules.

Card data

Save a card once, use it everywhere

PAN, expiry, service code, PIN, sequence number, track 2 layout and every verification value live on the card. Any test case can reach them, so a card change lands in all of them at once.

Calculation

Auto-calculated from your keys

Store the keys once and let FlexSim work out the values that depend on them — verification values, PIN blocks, message authentication codes and chip cryptograms — instead of pasting figures from somewhere else.

Connection

Server or client, your header length

Dial out as a client or accept connections as a server, with the length header the link actually uses rather than the one a tool assumed.

Log

Every message, parsed on screen

Requests and responses shown as named fields, not a wall of hex — with the raw bytes still there when you need them. Colour-coded and readable at a glance.

History

Go back through every run

Past exchanges are kept and searchable long after the session that produced them, so a question about last week's test has an answer.

Iterations

Run a case as many times as you need

Set a count beside Send and the case repeats — for volume, for soak testing, or just to watch a sequence advance. Stop halts it immediately.

  • Generated fields are recomputed each pass, so it is many messages, not one message many times
  • Trace numbers and counters carry on where they left off
  • In acquirer mode the same count is how many requests to answer
Suites

Group cases and run the tree

Cases live in suites per specification. Run one, run the lot, and get a pass or fail per case rather than a log to read line by line.

  • Results stream in as each case finishes
  • Export a spreadsheet or a self-contained report
  • Failures keep their raw bytes for investigation
Import

Start from a captured message

Paste a hex dump and FlexSim parses it against the active specification, turning it into a test case with the fields already filled in — structure taken apart the same way it was put together.

Reversals

Take the transaction back

A case can follow its own request with the reversal for it, once the reply has landed. Most of the message is echoed from what was actually sent; the few fields that differ you type in.

  • 0200 reverses as 0400 on its own, or set the message type yourself
  • A delay before it goes, so the host sees the gap a timed-out terminal leaves
  • In an iteration run, one reversal per pass
In the box

Four profiles, ready to use

The app arrives with four working message formats already built, so there is something to send on the first run. Open any of them in the editor and bend it to the document you were actually given.

Wiring

Any card value, in any field

Point a data element at the card value it should carry — PAN, track, PIN block, any verification value, even a key — instead of being limited to whatever its field number happened to imply.

Modes

Whichever end you are missing, FlexSim is it

Testing an authorisation flow always means standing in for the party you do not have. FlexSim stands in for either one, and moving between them is a setting on the test case — not a different tool and not a second set of message definitions to keep in step.

Each mode is named for the system you are testing, and FlexSim plays the other side of the link.

Acquirer mode

Answer requests as the host

You are testing an acquirer — a terminal, an ATM or an acquiring switch. FlexSim stands in for the issuer host: it listens on a port, checks each incoming request against your definition and sends the reply — approval, decline, or any response code you want to see handled.

  • Test a terminal or switch when the real host is not available
  • Return a specific response code on demand and watch it being handled
  • Echo fields straight back from the request, or set them explicitly
  • Answer a fixed number of requests, then release the port

Issuer mode

Send requests to a host

You are testing an issuer host. FlexSim stands in for the acquirer: it opens the connection, sends the authorisation request, and checks the reply against the rules on that test case.

  • Certify an issuer host or a switch against your message format
  • Reproduce a production message from a captured hex dump
  • Repeat a case for volume with an iteration count
  • Follow the request with a reversal, after a delay you set
  • Read the response decoded field by field, hex kept alongside

Card data

Enter the card once. Every case gets it.

A saved card carries everything a message might need from it, and test cases reference the card rather than copying values out of it. Change the expiry and every case that uses that card sends the new one.

  • PAN, expiry, service code, PIN and card sequence number
  • Verification values — CVV, CVV2, iCVV and PVV with its key index
  • A track 2 layout saved per card, so the track reproduces exactly
  • Any of them can be pointed at any data element, not just the one its number implies
  • Keys referenced from a shared store rather than pasted per card
  • Stored encrypted on your machine, and left out of any suite you export
Saved card
PAN 712345••••••2342
Expiry 2809
Service code 501
Sequence 01

// calculated from the saved keys
CVV 092
CVV2 418
iCVV 733
PVV 4173 (key index 1)
Referenced from any test case, in any specification.

Calculation

Values worked out, not looked up

Keys are stored once in the key manager and referenced by the cards that use them. Anything derived from a key can then be calculated on demand — so a test stays correct when the card, the amount or the key changes.

  • Card verification values, including the chip variant
  • PIN verification values, from the PIN and the verification key
  • PIN blocks, formatted and encrypted under the PIN key
  • Message authentication codes over the assembled message
  • Chip cryptograms for the request, and the issuer's answer to them
  • Fields that mirror the message itself — trace numbers, amounts, dates, counters

When something needed for a calculation is missing, FlexSim names what it is waiting for rather than quietly leaving the field blank.

Key store
// held once, shared by every card
CVK card verification
PVK PIN verification
ZPK PIN block encryption
MAC message authentication
AC chip cryptogram master

// each shows its check value as you type
KCV verified before the key is saved
Rotate a key once and every card that references it follows.

Validation

Rules per test case, so a run reports itself

Each case carries its own expectations of the reply. Run a suite and you get pass or fail per case, not a log to read line by line.

Per case

Say what a good reply looks like

Rules are attached to the case, so the same message sent in two contexts can be judged by two different standards.

Optional

Checking switches off without loss

Turn validation off for a case and it still runs and still sends — the reply simply is not judged, and the rules are waiting when you turn it back on.

Report

Results you can send on

Suite results stream in as each case finishes and export as a spreadsheet or a self-contained report, with the raw bytes kept for anything that failed.

Transport

Server or client, with the header your link uses

ISO 8583 says nothing about how a message is delimited on a stream, which is why every link does it differently. FlexSim makes the framing a setting rather than an assumption, and works from either end of the socket.

  • Client mode — dial out to the host under test
  • Server mode — listen and accept the connection instead
  • Two-byte, four-byte or TPDU length headers
  • Application headers ahead of the message, if the specification has them
  • Connection state visible while a run is going, and released cleanly on stop
Framing
// two-byte length header
00 86 ISO0050005000800822000…

// four-byte length header
00 00 00 86 ISO0050005000800822…

// TPDU header
60 00 01 00 01 0800822000…
Chosen per connection, not baked into the build.

Visibility

See it, keep it, and make it yours

A simulator is only as useful as what it shows you afterwards. FlexSim parses every message on screen, keeps the history, and writes a plain text copy to disk.

Live log

Parsed, colour-coded, readable

Requests and responses broken out into named fields as they happen, with the hex and the character rendering beside them. Nothing is trimmed away mid-run.

History

Every previous test case

Past exchanges stay in the database, grouped by specification, with their decode intact. Select any one and read it exactly as it looked when it was sent.

Appearance

Skin it the way you work

Light and dark themes, and log colours you set yourself. Every change applies as you make it, and closing without saving puts it back.

A plain text log is written to disk as well. It mirrors what is on screen, rolls at a size you choose and again at midnight, and lands in a folder you pick — so evidence for a test outlives the window it ran in.

Also in the box

The smaller things you end up needing

The parts that are not headline features but decide whether a testing day goes smoothly.

Share

Export suites, keep the secrets

Suites round-trip through JSON and XML so a colleague can import yours. Card and key material is deliberately left out of the file.

Tools

A scratchpad, built in

Work out a CVV, iCVV, PVV or PIN block from a PAN and a key with no card saved, convert between ASCII, EBCDIC and hex, decode a tag-length-value blob, combine or wrap keys — without a second window on another screen.

Security

A master password, if you want one

Card and key material is encrypted at rest. Set a master password and the database is re-encrypted under it, with the app locked until it is entered.

Portable

One file holds your work

Specifications, suites, cards, keys, settings and history live in a single database file. Copy it to another machine and carry on where you stopped.

Install

Two files, no installer, no service

A FlexSim build is the executable and a template database. Everything you create lives in one file in your user data folder, which you can copy to another machine and carry on.

  • No administrator rights and nothing written to the registry
  • The first run seeds your database from the bundled template
  • Rebuilds and cleans cannot reach your data — it sits outside the build folder
  • Startup logs the database path, so there is never a question which file is live
What you unzip
FlexSim-win-x64/
  FlexSim.exe — self-contained
  Assets/
    simulator.db — first-run template

// on first launch
Database: %LOCALAPPDATA%\FlexSim\simulator.db
Time to first window: 2.8 seconds, precompiled ahead of time.

Start sending messages in about a minute

Download the build for your machine, unzip it, run it. The app opens with a working specification and a sample suite already in place.

Windows · macOS · Linux · x64 and ARM64