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
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'}}
- Pretty print a decoded dictionary using iso8583.pp
- Add/update fields in a decoded dictionary using iso8583.add_field
- Remove fields in a decoded dictionary using iso8583.del_field
iso8583 package is hosted on GitHub.
Feel free to fork and send contributions over.