001/* 002 * jPOS Project [http://jpos.org] 003 * Copyright (C) 2000-2026 jPOS Software SRL 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018 019package org.jpos.iso.packager; 020 021import org.jpos.iso.*; 022 023/** 024 * ISO 8583 v1987 BINARY Packager 025 * customized for VISA's Base1 026 * @author <a href="mailto:eoin.flood@orbiscom.com">Eoin Flood</a> 027 * @version $Id$ 028 * @see ISOPackager 029 * @see ISOBasePackager 030 * @see ISOComponent 031 */ 032public class Base1Packager extends ISOBasePackager 033{ 034 private static final boolean pad = true; 035 /** BASE-1 field packager definitions for fields 0-128. */ 036 protected ISOFieldPackager base1Fld[] = 037 { 038/*000*/ new IFB_NUMERIC ( 4, "MESSAGE TYPE INDICATOR", true), 039/*001*/ new IFB_BITMAP ( 16, "BIT MAP"), 040/*002*/ new IFB_LLHNUM ( 19, "PAN - PRIMARY ACCOUNT NUMBER", pad), 041/*003*/ new IFB_NUMERIC ( 6, "PROCESSING CODE", true), 042/*004*/ new IFB_NUMERIC ( 12, "AMOUNT, TRANSACTION", true), 043/*005*/ new IFB_NUMERIC ( 12, "AMOUNT, SETTLEMENT", true), 044/*006*/ new IFB_NUMERIC ( 12, "AMOUNT, CARDHOLDER BILLING", true), 045/*007*/ new IFB_NUMERIC ( 10, "TRANSMISSION DATE AND TIME", true), 046/*008*/ new IFB_NUMERIC ( 8, "AMOUNT, CARDHOLDER BILLING FEE", true), 047/*009*/ new IFB_NUMERIC ( 8, "CONVERSION RATE, SETTLEMENT", true), 048/*010*/ new IFB_NUMERIC ( 8, "CONVERSION RATE, CARDHOLDER BILLING", true), 049/*011*/ new IFB_NUMERIC ( 6, "SYSTEM TRACE AUDIT NUMBER", true), 050/*012*/ new IFB_NUMERIC ( 6, "TIME, LOCAL TRANSACTION", true), 051/*013*/ new IFB_NUMERIC ( 4, "DATE, LOCAL TRANSACTION", true), 052/*014*/ new IFB_NUMERIC ( 4, "DATE, EXPIRATION", true), 053/*015*/ new IFB_NUMERIC ( 4, "DATE, SETTLEMENT", true), 054/*016*/ new IFB_NUMERIC ( 4, "DATE, CONVERSION", true), 055/*017*/ new IFB_NUMERIC ( 4, "DATE, CAPTURE", true), 056/*018*/ new IFB_NUMERIC ( 4, "MERCHANTS TYPE", true), 057/*019*/ new IFB_NUMERIC ( 3, "ACQUIRING INSTITUTION COUNTRY CODE", true), 058/*020*/ new IFB_NUMERIC ( 3, "PAN EXTENDED COUNTRY CODE", true), 059/*021*/ new IFB_NUMERIC ( 3, "FORWARDING INSTITUTION COUNTRY CODE", true), 060/*022*/ new IFB_NUMERIC ( 4, "POINT OF SERVICE ENTRY MODE", true), 061/*023*/ new IFB_NUMERIC ( 3, "CARD SEQUENCE NUMBER", true), 062/*024*/ new IFB_NUMERIC ( 3, "NETWORK INTERNATIONAL IDENTIFIEER", true), 063/*025*/ new IFB_NUMERIC ( 2, "POINT OF SERVICE CONDITION CODE", true), 064/*026*/ new IFB_NUMERIC ( 2, "POINT OF SERVICE PIN CAPTURE CODE", true), 065/*027*/ new IFB_NUMERIC ( 1, "AUTHORIZATION IDENTIFICATION RESP LEN",true), 066/*028*/ new IFB_AMOUNT ( 9, "AMOUNT, TRANSACTION FEE", true), 067/*029*/ new IFB_AMOUNT ( 9, "AMOUNT, SETTLEMENT FEE", true), 068/*030*/ new IFB_AMOUNT ( 9, "AMOUNT, TRANSACTION PROCESSING FEE", true), 069/*031*/ new IFB_AMOUNT ( 9, "AMOUNT, SETTLEMENT PROCESSING FEE", true), 070/*032*/ new IFB_LLHNUM ( 11, "ACQUIRING INSTITUTION IDENT CODE", pad), 071/*033*/ new IFB_LLHNUM ( 11, "FORWARDING INSTITUTION IDENT CODE", pad), 072/*034*/ new IFB_LLHNUM ( 28, "PAN EXTENDED", pad), 073/*035*/ new IFB_LLHNUM ( 37, "TRACK 2 DATA", pad), 074/*036*/ new IFB_LLLNUM (104, "TRACK 3 DATA", pad), 075/*037*/ new IFE_CHAR ( 12, "RETRIEVAL REFERENCE NUMBER"), 076/*038*/ new IFE_CHAR ( 6, "AUTHORIZATION IDENTIFICATION RESPONSE"), 077/*039*/ new IFE_CHAR ( 2, "RESPONSE CODE"), 078/*040*/ new IFE_CHAR ( 3, "SERVICE RESTRICTION CODE"), 079/*041*/ new IFE_CHAR ( 8, "CARD ACCEPTOR TERMINAL IDENTIFICACION"), 080/*042*/ new IFE_CHAR ( 15, "CARD ACCEPTOR IDENTIFICATION CODE" ), 081/*043*/ new IFE_CHAR ( 40, "CARD ACCEPTOR NAME/LOCATION"), 082/*044*/ new IFB_LLHECHAR( 25, "ADITIONAL RESPONSE DATA"), 083/*045*/ new IFB_LLHECHAR( 76, "TRACK 1 DATA"), 084/*046*/ new IFB_LLHCHAR ( 99, "ADDITIONAL DATA - ISO"), 085/*047*/ new IFB_LLHCHAR ( 99, "ADDITIONAL DATA - NATIONAL"), 086/*048*/ new IFB_LLHBINARY ( 99, "ADDITIONAL DATA - PRIVATE"), 087/*049*/ new IFB_NUMERIC ( 3, "CURRENCY CODE, TRANSACTION", true), 088/*050*/ new IFB_NUMERIC ( 3, "CURRENCY CODE, SETTLEMENT", true), 089/*051*/ new IFB_NUMERIC ( 3, "CURRENCY CODE, CARDHOLDER BILLING", true), 090/*052*/ new IFB_BINARY ( 8, "PIN DATA" ), 091/*053*/ new IFB_NUMERIC ( 16, "SECURITY RELATED CONTROL INFORMATION", true), 092/*054*/ new IFB_LLHECHAR(120, "ADDITIONAL AMOUNTS"), 093/*055*/ new IFB_LLHBINARY(255, "RESERVED ISO"), 094/*056*/ new IFB_LLHCHAR ( 99, "RESERVED ISO"), 095/*057*/ new IFB_LLHCHAR ( 99, "RESERVED NATIONAL"), 096/*058*/ new IFB_LLHCHAR ( 99, "RESERVED NATIONAL"), 097/*059*/ new IFB_LLHECHAR( 14, "NATIONAL POS GEOGRAPHIC DATA"), 098/*060*/ new IFB_LLHBINARY( 6, "RESERVED PRIVATE"), 099/*061*/ new IFB_LLHNUM ( 36, "RESERVED PRIVATE", pad), 100/*062*/ new IFB_LLHBINARY( 59, "PAYMENT SERVICE FIELDS"), 101/*063*/ new IFB_LLHBINARY(255, "SMS PRIVATE-USE FIELDS"), 102/*064*/ new IFB_BINARY ( 8, "MESSAGE AUTHENTICATION CODE FIELD"), 103/*065*/ new IFB_BINARY ( 1, "BITMAP, EXTENDED"), 104/*066*/ new IFB_NUMERIC ( 1, "SETTLEMENT CODE", true), 105/*067*/ new IFB_NUMERIC ( 2, "EXTENDED PAYMENT CODE", true), 106/*068*/ new IFB_NUMERIC ( 3, "RECEIVING INSTITUTION COUNTRY CODE", true), 107/*069*/ new IFB_NUMERIC ( 3, "SETTLEMENT INSTITUTION COUNTRY CODE", true), 108/*070*/ new IFB_NUMERIC ( 3, "NETWORK MANAGEMENT INFORMATION CODE", true), 109/*071*/ new IFB_NUMERIC ( 4, "MESSAGE NUMBER", true), 110/*072*/ new IFB_NUMERIC ( 4, "MESSAGE NUMBER LAST", true), 111/*073*/ new IFB_NUMERIC ( 6, "DATE ACTION", true), 112/*074*/ new IFB_NUMERIC ( 10, "CREDITS NUMBER", true), 113/*075*/ new IFB_NUMERIC ( 10, "CREDITS REVERSAL NUMBER", true), 114/*076*/ new IFB_NUMERIC ( 10, "DEBITS NUMBER", true), 115/*077*/ new IFB_NUMERIC ( 10, "DEBITS REVERSAL NUMBER", true), 116/*078*/ new IFB_NUMERIC ( 10, "TRANSFER NUMBER", true), 117/*079*/ new IFB_NUMERIC ( 10, "TRANSFER REVERSAL NUMBER", true), 118/*080*/ new IFB_NUMERIC ( 10, "INQUIRIES NUMBER", true), 119/*081*/ new IFB_NUMERIC ( 10, "AUTHORIZATION NUMBER", true), 120/*082*/ new IFB_NUMERIC ( 12, "CREDITS, PROCESSING FEE AMOUNT", true), 121/*083*/ new IFB_NUMERIC ( 12, "CREDITS, TRANSACTION FEE AMOUNT", true), 122/*084*/ new IFB_NUMERIC ( 12, "DEBITS, PROCESSING FEE AMOUNT", true), 123/*085*/ new IFB_NUMERIC ( 12, "DEBITS, TRANSACTION FEE AMOUNT", true), 124/*086*/ new IFB_NUMERIC ( 16, "CREDITS, AMOUNT", true), 125/*087*/ new IFB_NUMERIC ( 16, "CREDITS, REVERSAL AMOUNT", true), 126/*088*/ new IFB_NUMERIC ( 16, "DEBITS, AMOUNT", true), 127/*089*/ new IFB_NUMERIC ( 16, "DEBITS, REVERSAL AMOUNT", true), 128/*090*/ new IFB_NUMERIC ( 42, "ORIGINAL DATA ELEMENTS", true), 129/*091*/ new IFE_CHAR ( 1, "FILE UPDATE CODE"), 130/*092*/ new IFE_CHAR ( 2, "FILE SECURITY CODE"), 131/*093*/ new IFE_CHAR ( 5, "RESPONSE INDICATOR"), 132/*094*/ new IFE_CHAR ( 7, "SERVICE INDICATOR"), 133/*095*/ new IFE_CHAR ( 42, "REPLACEMENT AMOUNTS"), 134/*096*/ new IFB_BINARY ( 8, "MESSAGE SECURITY CODE"), 135/*097*/ new IFB_AMOUNT ( 17, "AMOUNT, NET SETTLEMENT", pad), 136/*098*/ new IFE_CHAR ( 25, "PAYEE"), 137/*099*/ new IFB_LLHNUM ( 11, "SETTLEMENT INSTITUTION IDENT CODE", pad), 138/*100*/ new IFB_LLHNUM ( 11, "RECEIVING INSTITUTION IDENT CODE", pad), 139/*101*/ new IFB_LLHECHAR( 17, "FILE NAME"), 140/*102*/ new IFB_LLHCHAR ( 28, "ACCOUNT IDENTIFICATION 1"), 141/*103*/ new IFB_LLHCHAR ( 28, "ACCOUNT IDENTIFICATION 2"), 142/*104*/ new IFB_LLHCHAR ( 99, "TRANSACTION DESCRIPTION"), 143/*105*/ new IFB_LLHCHAR ( 99, "RESERVED ISO USE"), 144/*106*/ new IFB_LLHCHAR ( 99, "RESERVED ISO USE"), 145/*107*/ new IFB_LLHCHAR ( 99, "RESERVED ISO USE"), 146/*108*/ new IFB_LLHCHAR ( 99, "RESERVED ISO USE"), 147/*109*/ new IFB_LLHCHAR ( 99, "RESERVED ISO USE"), 148/*110*/ new IFB_LLHCHAR ( 99, "RESERVED ISO USE"), 149/*111*/ new IFB_LLHCHAR ( 99, "RESERVED ISO USE"), 150/*112*/ new IFB_LLHCHAR ( 99, "RESERVED NATIONAL USE"), 151/*113*/ new IFB_LLHCHAR ( 99, "RESERVED NATIONAL USE"), 152/*114*/ new IFB_LLHCHAR ( 99, "RESERVED NATIONAL USE"), 153/*115*/ new IFB_LLHCHAR ( 24, "ADDITIONAL TRACE DATA 1"), 154/*116*/ new IFB_LLHCHAR ( 99, "RESERVED NATIONAL USE"), 155/*117*/ new IFB_LLHCHAR ( 99, "RESERVED NATIONAL USE"), 156/*118*/ new IFB_LLHBINARY( 99, "INTRA-COUNTRY DATA"), 157/*119*/ new IFB_LLHCHAR ( 99, "RESERVED NATIONAL USE"), 158/*120*/ new IFB_LLHNUM ( 4, "RESERVED PRIVATE USE", pad), 159/*121*/ new IFB_LLHCHAR ( 11, "ISSUING INSTITUTION IDENT CODE"), 160/*122*/ new IFB_LLHCHAR ( 13, "REMAINING OPEN-TO-USE"), 161/*123*/ new IFB_LLHECHAR( 29, "ADDRESS VERIFICATION DATA"), 162/*124*/ new IFB_LLHBINARY( 99, "FREE-FORM TEXT-JAPAN"), 163/*125*/ new IFB_LLHCHAR ( 99, "SUPPORTING INFORMATION"), 164/*126*/ new ISOMsgFieldPackager( 165 new IFB_LLHBINARY (255, "Field 126"), 166 new F126Packager()), 167/*127*/ new ISOMsgFieldPackager( 168 new IFB_LLHBINARY (255, "FILE RECORD(S) ACTION/DATA"), 169 new F127Packager()), 170/*128*/ new IFB_BINARY ( 8, "MAC 2") 171 }; 172 173 /** ISO-8583 sub-field packager for field 126. */ 174 protected static class F126Packager extends Base1SubFieldPackager 175 { 176 /** Field packager definitions for sub-fields of field 126. */ 177 protected ISOFieldPackager fld126[] = 178 { 179 new Base1_BITMAP126(16, "Bit Map"), 180 new IFE_CHAR (25, "Customer Name"), 181 new IFE_CHAR (57, "Customer Address"), 182 new IFE_CHAR (57, "Biller Address"), 183 new IFE_CHAR (18, "Biller Telephone Number"), 184 new IFE_CHAR (6, "Process By Date"), 185 new IFB_LLNUM (17, "Cardholder Cert Serial Number", true), 186 new IFB_LLNUM (17, "Merchant Cert Serial Number", true), 187 new IFB_NUMERIC (40, "Transaction ID", true), 188 new IFB_NUMERIC (40, "TransStain", true), 189 new IFE_CHAR (6, "CVV2 Request Data"), 190 }; 191 192 /** Creates F126Packager with the default field configuration. */ 193 protected F126Packager () 194 { 195 super(); 196 setFieldPackager(fld126); 197 } 198 } 199 200 /** ISO-8583 sub-field packager for field 127. */ 201 protected static class F127Packager extends ISOBasePackager 202 { 203 /** Field packager definitions for sub-fields of field 127. */ 204 protected ISOFieldPackager fld127[] = 205 { 206 new IFE_CHAR (1, "FILE UPDATE COD"), 207 new IFB_LLHNUM (19, "ACCOUNT NUMBER", true), 208 new IFB_NUMERIC (4, "PURGE DATE", true), 209 new IFE_CHAR (2, "ACTION CODE"), 210 new IFE_CHAR (9, "REGION CODING"), 211 new IFB_NUMERIC (4, "FILLER", true), 212 }; 213 /** Creates F127Packager with the default field configuration. */ 214 protected F127Packager () 215 { 216 super(); 217 setFieldPackager(fld127); 218 } 219 } 220 221 /** Creates Base1Packager with the default BASE-1 field configuration. */ 222 public Base1Packager() 223 { 224 super(); 225 setFieldPackager(base1Fld); 226 } 227} 228