github.com/danil/iso8583@v0.21.0/codec8583/tsys_format.go (about) 1 package codec8583 2 3 import ( 4 "github.com/danil/iso8583/tsysbitmap64r" 5 ) 6 7 var ( 8 TSYSMarshaler = NewMarshaler(TSYS) 9 TSYSUnmarshaler = NewUnmarshaler(TSYS) 10 ) 11 12 // TSYS is a format of the ISO 8583 message which maps the codecs to MIT/bitmaps/each individual field. 13 var TSYS = Format{ 14 -1: MTIAsciiCodec, // Message type indicator (MTI) 15 0: BitmapCodec, // Primary Bitmap 16 1: BitmapCodec, // Second Bitmap 17 2: LLVAR{19, ASCII, EncN, DecN}, // Primary account number (PAN) 18 3: FIX{6, ASCII, EncN, DecN}, // Processing code 19 4: FIX{12, ASCII, EncN, DecN}, // Amount, transaction 20 5: FIX{12, ASCII, EncN, DecN}, // Amount, settlement 21 6: FIX{12, ASCII, EncN, DecN}, // Amount, cardholder billing 22 7: FIX{10, ASCII, EncN, DecN}, // Transmission date & time 23 8: FIX{8, ASCII, EncN, DecN}, // Amount, cardholder billing fee 24 9: FIX{8, ASCII, EncN, DecN}, // Conversion rate, settlement 25 10: FIX{8, ASCII, EncN, DecN}, // Conversion rate, cardholder billing 26 11: FIX{6, ASCII, EncN, DecN}, // System trace audit number (STAN) 27 12: FIX{6, ASCII, EncN, DecN}, // Local transaction time (hhmmss) 28 13: FIX{4, ASCII, EncN, DecN}, // Local transaction date (MMDD) 29 14: FIX{4, ASCII, EncN, DecN}, // Expiration date 30 15: FIX{4, ASCII, EncN, DecN}, // Settlement date 31 16: FIX{4, ASCII, EncN, DecN}, // Currency conversion date 32 17: FIX{4, ASCII, EncN, DecN}, // Capture date 33 18: FIX{4, ASCII, EncN, DecN}, // Merchant type, or merchant category code 34 19: FIX{3, ASCII, EncN, DecN}, // Acquiring institution (country code) 35 20: FIX{3, ASCII, EncN, DecN}, // PAN extended (country code) 36 21: FIX{3, ASCII, EncN, DecN}, // Forwarding institution (country code) 37 22: FIX{4, ASCII, EncN, DecN}, // Point of service entry mode 38 23: FIX{3, ASCII, EncN, DecN}, // Application PAN sequence number 39 24: FIX{3, ASCII, EncN, DecN}, // Function code (ISO 8583:1993), or network international identifier (NII) 40 25: FIX{2, ASCII, EncN, DecN}, // Point of service condition code 41 26: FIX{2, ASCII, EncN, DecN}, // Point of service capture code 42 27: FIX{1, ASCII, EncN, DecN}, // Authorizing identification response length 43 28: FIX{9, ASCII, EncN, DecN}, // Amount, transaction fee 44 29: FIX{8, ASCII, EncN, DecN}, // Amount, settlement fee 45 30: FIX{8, ASCII, EncN, DecN}, // Amount, transaction processing fee 46 31: FIX{15, ASCII, EncN, DecN}, // Amount, settlement processing fee 47 32: LLVAR{11, ASCII, EncN, DecN}, // Acquiring institution identification code 48 33: LLVAR{11, ASCII, EncN, DecN}, // Forwarding institution identification code 49 34: LLVAR{28, ASCII, EncN, DecN}, // Primary account number, extended 50 35: LLVAR{37, ASCII, EncANS, DecANS}, // Track 2 data (PAN with expiry date) 51 36: LLLVAR{104, ASCII, EncN, DecN}, // Track 3 data 52 37: FIX{12, ASCII, EncAN, DecAN}, // Retrieval reference number 53 38: FIX{6, ASCII, EncAN, DecAN}, // Authorization identification response 54 39: FIX{2, ASCII, EncAN, DecAN}, // Response code 55 40: FIX{3, ASCII, EncAN, DecAN}, // Service restriction code 56 41: FIX{8, ASCII, EncANS, DecANS}, // Card acceptor terminal identification 57 42: FIX{15, ASCII, EncANS, DecANS}, // Card acceptor identification code 58 43: FIX{40, ASCII, EncANS, DecANS}, // Card acceptor name/location (1–23 street address, –36 city, –38 state, 39–40 country) 59 44: LLVAR{25, ASCII, EncAN, DecAN}, // Additional response data 60 45: LLVAR{76, ASCII, EncAN, DecAN}, // Track 1 data 61 46: LLLVAR{999, ASCII, EncAN, DecAN}, // Additional data (ISO) 62 47: LLLVAR{999, ASCII, EncAN, DecAN}, // Additional data (national) 63 48: LLLVAR{999, ASCII, EncAN, DecAN}, // Additional data (private) (DE 48: Subelement 10 — Encrypted PIN Block Key, Subelement 80 — PIN Service Code) 64 49: FIX{3, ASCII, EncA, DecA}, // Currency code, transaction 65 50: FIX{3, ASCII, EncAN, DecAN}, // Currency code, settlement 66 51: FIX{3, ASCII, EncA, DecA}, // Currency code, cardholder billing 67 52: FIX{8, ASCII, EncB, DecB}, // Personal identification number data (DE 52: Personal ID Number (PIN) Data) 68 53: FIX{18, ASCII, EncN, DecN}, // Security related control information (DE 53: Security-Related Control Information, Subfield 1 — PIN Security Type Code, Subfield 2 — PIN Encryption Type Code, Subfield 3 — PIN Block Format Code, Subfield 4—PIN Key Index Number 69 54: LLLVAR{120, ASCII, EncAN, DecAN}, // Additional amounts 70 55: LLLVAR{255, ASCII, EncB, DecB}, // ICC data – EMV having multiple tags 71 56: LLVAR{35, ASCII, EncANS, DecANS}, // Reserved (ISO) 72 57: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved (national) 73 58: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved (national) 74 59: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved (national) 75 60: LLVAR{8, ASCII, EncAN, DecAN}, // Reserved (national) (e.g. settlement request: batch number, advice transactions: original transaction amount, batch upload: original MTI plus original RRN plus original STAN, etc.) 76 61: LLVAR{36, ASCII, EncANS, DecANS}, // Reserved (private) (e.g. transactions: invoice number, key exchange transactions: TPK key, etc.) 77 62: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved (private) (e.g. transactions: invoice number, key exchange transactions: TPK key, etc.) 78 63: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved (private) 79 64: FIX{16, ASCII, EncB, DecB}, // Message authentication code (MAC) 80 65: FIX{16, ASCII, EncB, DecB}, // Extended bitmap indicator 81 66: FIX{1, ASCII, EncN, DecN}, // Settlement code 82 67: FIX{2, ASCII, EncN, DecN}, // Extended payment code 83 68: FIX{3, ASCII, EncN, DecN}, // Receiving institution country code 84 69: FIX{3, ASCII, EncN, DecN}, // Settlement institution country code 85 70: FIX{3, ASCII, EncN, DecN}, // Network management information code 86 71: FIX{4, ASCII, EncN, DecN}, // Message number 87 72: LLLVAR{999, ASCII, EncANS, DecANS}, // Last message's number 88 73: FIX{6, ASCII, EncN, DecN}, // Action date (YYMMDD) 89 74: FIX{10, ASCII, EncN, DecN}, // Number of credits 90 75: FIX{10, ASCII, EncN, DecN}, // Credits, reversal number 91 76: FIX{10, ASCII, EncN, DecN}, // Number of debits 92 77: FIX{10, ASCII, EncN, DecN}, // Debits, reversal number 93 78: FIX{10, ASCII, EncN, DecN}, // Transfer number 94 79: FIX{10, ASCII, EncN, DecN}, // Transfer, reversal number 95 80: FIX{10, ASCII, EncN, DecN}, // Number of inquiries 96 81: FIX{10, ASCII, EncN, DecN}, // Number of authorizations 97 82: FIX{12, ASCII, EncN, DecN}, // Credits, processing fee amount 98 83: FIX{12, ASCII, EncN, DecN}, // Credits, transaction fee amount 99 84: FIX{12, ASCII, EncN, DecN}, // Debits, processing fee amount 100 85: FIX{12, ASCII, EncN, DecN}, // Debits, transaction fee amount 101 86: FIX{15, ASCII, EncN, DecN}, // Total amount of credits 102 87: FIX{15, ASCII, EncN, DecN}, // Credits, reversal amount 103 88: FIX{15, ASCII, EncN, DecN}, // Total amount of debits 104 89: FIX{15, ASCII, EncN, DecN}, // Debits, reversal amount 105 90: FIX{42, ASCII, EncN, DecN}, // Original data elements 106 91: FIX{1, ASCII, EncAN, DecAN}, // File update code 107 92: FIX{2, ASCII, EncN, DecN}, // File security code 108 93: FIX{4, ASCII, EncN, DecN}, // Response indicator 109 94: FIX{2, ASCII, EncAN, DecAN}, // Service indicator 110 95: FIX{42, ASCII, EncAN, DecAN}, // Replacement amounts 111 96: FIX{8, ASCII, EncAN, DecAN}, // Message security code 112 97: FIX{16, ASCII, EncN, DecN}, // Net settlement amount 113 98: FIX{25, ASCII, EncANS, DecANS}, // Payee 114 99: FIX{1, ASCII, EncN, DecN}, // Settlement institution identification code 115 100: LLVAR{11, ASCII, EncAN, DecAN}, // Receiving institution identification code 116 101: FIX{17, ASCII, EncANS, DecANS}, // File name 117 102: LLVAR{28, ASCII, EncANS, DecANS}, // Account identification 1 118 103: LLVAR{28, ASCII, EncANS, DecANS}, // Account identification 2 119 104: LLVAR{28, ASCII, EncANS, DecANS}, // Transaction description 120 105: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved for ISO use 121 106: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved for ISO use 122 107: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved for ISO use 123 108: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved for ISO use 124 109: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved for ISO use 125 110: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved for ISO use 126 111: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved for ISO use 127 112: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved for national use 128 113: LLVAR{11, ASCII, EncN, DecN}, // Reserved for national use 129 114: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved for national use 130 115: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved for national use 131 116: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved for national use 132 117: LLLVAR{120, ASCII, EncANS, DecANS}, // Reserved for national use 133 118: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved for national use 134 119: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved for national use 135 120: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved for private use 136 121: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved for private use 137 122: LLVAR{78, ASCII, EncANS, DecANS}, // Reserved for private use 138 123: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved for private use 139 124: LLLVAR{255, ASCII, EncANS, DecANS}, // Reserved for private use 140 125: LLVAR{28, ASCII, EncANS, DecANS}, // Reserved for private use 141 126: LLVAR{99, ASCII, EncTSYSBitmap64R, DecTSYSBitmap64R}, // Reserved for private use 142 127: LLLVAR{999, ASCII, EncANS, DecANS}, // Reserved for private use 143 128: FIX{16, ASCII, EncB, DecB}, // Message authentication code 144 } 145 146 // EncTSYSBitmap64R intends to encode TSYS specific bitmap 147 // the size of which is 8 bytes (64 bit) 148 // plus one additional optional byte for the "R" flag. 149 func EncTSYSBitmap64R(_ Hasher, _ Codec, data []byte) ([]byte, error) { 150 b, err := tsysbitmap64r.NewString(string(data)) 151 if err != nil { 152 return nil, err 153 } 154 return b.MarshalISO8583() 155 } 156 157 // DecTSYSBitmap64R intends to decode TSYS specific bitmap 158 // the size of which is 8 bytes (64 bit) 159 // plus one additional optional byte for the "R" flag. 160 func DecTSYSBitmap64R(_ Hasher, _ Codec, data []byte) ([]byte, error) { 161 return []byte(tsysbitmap64r.New(data).String()), nil 162 }