Skip to main content

A serializer and deserializer of ISO8583 data.

Project description

iso8583

PyPI Documentation Status Test coverage

iso8583 package serializes and deserializes ISO8583 data between a bytes or bytearray instance containing ISO8583 data and a Python dict.

iso8583 package supports custom specifications that can define

  • Field length and data encoding, such as BCD, ASCII, EBCDIC, etc.

  • Field type, such as fixed, LLVAR, LLLVAR, etc.

  • Maximum length

  • Optional field description

Multiple specifications can co-exist to support ISO8583 messages for POS, ATM, file actions, and so on. Simply define a new specification dictionary. iso8583 package includes a starter specification in iso8583.specs module that can be used as a base to create own custom/proprietary specifications.

Additional information is available on RTD.

Install:

pip install pyiso8583

Encoding & Decoding

Decode raw iso8583 message using iso8583.decode. It returns two dictionaries: one with decoded data and one with encoded data.

>>> import pprint
>>> import iso8583
>>> from iso8583.specs import default_ascii as spec
>>> s = b'02004000000000000000101234567890'
>>> doc_dec, doc_enc = iso8583.decode(s, spec)
>>> pprint.pp(doc_dec) # Decoded data
{'bm': {2}, 't': '0200', 'p': '4000000000000000', '2': '1234567890'}
>>> pprint.pp(doc_enc) # Broken down encoded data
{'bm': {2},
 't': {'len': b'', 'data': b'0200'},
 'p': {'len': b'', 'data': b'4000000000000000'},
 '2': {'len': b'10', 'data': b'1234567890'}}

Modify the decoded message to send a response back. Change message type from ‘0200’ to ‘0210’. Remove field 2 (PAN). And add field 39 (Response Code).

>>> doc_dec['t'] = '0210'
>>> doc_dec['bm'].discard(2)
>>> doc_dec['bm'].add(39)
>>> doc_dec['39'] = '05'

Encode updated ISO8583 message using iso8583.encode. It returns a raw ISO8583 message and a dictionary with encoded data.

>>> s, doc_enc = iso8583.encode(doc_dec, spec)
>>> s
bytearray(b'0210000000000200000005')
>>> pprint.pp(doc_enc)
{'t': {'len': b'', 'data': b'0210'},
 'bm': {39},
 'p': {'len': b'', 'data': b'0000000002000000'},
 '39': {'len': b'', 'data': b'05'}}

Optional Helper Functions

Contribute

iso8583 package is hosted on GitHub.

Feel free to fork and send contributions over.

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

pyiso8583-1.0.2.tar.gz (40.0 kB view hashes)

Uploaded Source

Built Distribution

pyiso8583-1.0.2-py3-none-any.whl (15.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page