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 protected ISOFieldPackager base1Fld[] = 036 { 037/*000*/ new IFB_NUMERIC ( 4, "MESSAGE TYPE INDICATOR", true), 038/*001*/ new IFB_BITMAP ( 16, "BIT MAP"), 039/*002*/ new IFB_LLHNUM ( 19, "PAN - PRIMARY ACCOUNT NUMBER", pad), 040/*003*/ new IFB_NUMERIC ( 6, "PROCESSING CODE", true), 041/*004*/ new IFB_NUMERIC ( 12, "AMOUNT, TRANSACTION", true), 042/*005*/ new IFB_NUMERIC ( 12, "AMOUNT, SETTLEMENT", true), 043/*006*/ new IFB_NUMERIC ( 12, "AMOUNT, CARDHOLDER BILLING", true), 044/*007*/ new IFB_NUMERIC ( 10, "TRANSMISSION DATE AND TIME", true), 045/*008*/ new IFB_NUMERIC ( 8, "AMOUNT, CARDHOLDER BILLING FEE", true), 046/*009*/ new IFB_NUMERIC ( 8, "CONVERSION RATE, SETTLEMENT", true), 047/*010*/ new IFB_NUMERIC ( 8, "CONVERSION RATE, CARDHOLDER BILLING", true), 048/*011*/ new IFB_NUMERIC ( 6, "SYSTEM TRACE AUDIT NUMBER", true), 049/*012*/ new IFB_NUMERIC ( 6, "TIME, LOCAL TRANSACTION", true), 050/*013*/ new IFB_NUMERIC ( 4, "DATE, LOCAL TRANSACTION", true), 051/*014*/ new IFB_NUMERIC ( 4, "DATE, EXPIRATION", true), 052/*015*/ new IFB_NUMERIC ( 4, "DATE, SETTLEMENT", true), 053/*016*/ new IFB_NUMERIC ( 4, "DATE, CONVERSION", true), 054/*017*/ new IFB_NUMERIC ( 4, "DATE, CAPTURE", true), 055/*018*/ new IFB_NUMERIC ( 4, "MERCHANTS TYPE", true), 056/*019*/ new IFB_NUMERIC ( 3, "ACQUIRING INSTITUTION COUNTRY CODE", true), 057/*020*/ new IFB_NUMERIC ( 3, "PAN EXTENDED COUNTRY CODE", true), 058/*021*/ new IFB_NUMERIC ( 3, "FORWARDING INSTITUTION COUNTRY CODE", true), 059/*022*/ new IFB_NUMERIC ( 4, "POINT OF SERVICE ENTRY MODE", true), 060/*023*/ new IFB_NUMERIC ( 3, "CARD SEQUENCE NUMBER", true), 061/*024*/ new IFB_NUMERIC ( 3, "NETWORK INTERNATIONAL IDENTIFIEER", true), 062/*025*/ new IFB_NUMERIC ( 2, "POINT OF SERVICE CONDITION CODE", true), 063/*026*/ new IFB_NUMERIC ( 2, "POINT OF SERVICE PIN CAPTURE CODE", true), 064/*027*/ new IFB_NUMERIC ( 1, "AUTHORIZATION IDENTIFICATION RESP LEN",true), 065/*028*/ new IFB_AMOUNT ( 9, "AMOUNT, TRANSACTION FEE", true), 066/*029*/ new IFB_AMOUNT ( 9, "AMOUNT, SETTLEMENT FEE", true), 067/*030*/ new IFB_AMOUNT ( 9, "AMOUNT, TRANSACTION PROCESSING FEE", true), 068/*031*/ new IFB_AMOUNT ( 9, "AMOUNT, SETTLEMENT PROCESSING FEE", true), 069/*032*/ new IFB_LLHNUM ( 11, "ACQUIRING INSTITUTION IDENT CODE", pad), 070/*033*/ new IFB_LLHNUM ( 11, "FORWARDING INSTITUTION IDENT CODE", pad), 071/*034*/ new IFB_LLHNUM ( 28, "PAN EXTENDED", pad), 072/*035*/ new IFB_LLHNUM ( 37, "TRACK 2 DATA", pad), 073/*036*/ new IFB_LLLNUM (104, "TRACK 3 DATA", pad), 074/*037*/ new IFE_CHAR ( 12, "RETRIEVAL REFERENCE NUMBER"), 075/*038*/ new IFE_CHAR ( 6, "AUTHORIZATION IDENTIFICATION RESPONSE"), 076/*039*/ new IFE_CHAR ( 2, "RESPONSE CODE"), 077/*040*/ new IFE_CHAR ( 3, "SERVICE RESTRICTION CODE"), 078/*041*/ new IFE_CHAR ( 8, "CARD ACCEPTOR TERMINAL IDENTIFICACION"), 079/*042*/ new IFE_CHAR ( 15, "CARD ACCEPTOR IDENTIFICATION CODE" ), 080/*043*/ new IFE_CHAR ( 40, "CARD ACCEPTOR NAME/LOCATION"), 081/*044*/ new IFB_LLHECHAR( 25, "ADITIONAL RESPONSE DATA"), 082/*045*/ new IFB_LLHECHAR( 76, "TRACK 1 DATA"), 083/*046*/ new IFB_LLHCHAR ( 99, "ADDITIONAL DATA - ISO"), 084/*047*/ new IFB_LLHCHAR ( 99, "ADDITIONAL DATA - NATIONAL"), 085/*048*/ new IFB_LLHBINARY ( 99, "ADDITIONAL DATA - PRIVATE"), 086/*049*/ new IFB_NUMERIC ( 3, "CURRENCY CODE, TRANSACTION", true), 087/*050*/ new IFB_NUMERIC ( 3, "CURRENCY CODE, SETTLEMENT", true), 088/*051*/ new IFB_NUMERIC ( 3, "CURRENCY CODE, CARDHOLDER BILLING", true), 089/*052*/ new IFB_BINARY ( 8, "PIN DATA" ), 090/*053*/ new IFB_NUMERIC ( 16, "SECURITY RELATED CONTROL INFORMATION", true), 091/*054*/ new IFB_LLHECHAR(120, "ADDITIONAL AMOUNTS"), 092/*055*/ new IFB_LLHBINARY(255, "RESERVED ISO"), 093/*056*/ new IFB_LLHCHAR ( 99, "RESERVED ISO"), 094/*057*/ new IFB_LLHCHAR ( 99, "RESERVED NATIONAL"), 095/*058*/ new IFB_LLHCHAR ( 99, "RESERVED NATIONAL"), 096/*059*/ new IFB_LLHECHAR( 14, "NATIONAL POS GEOGRAPHIC DATA"), 097/*060*/ new IFB_LLHBINARY( 6, "RESERVED PRIVATE"), 098/*061*/ new IFB_LLHNUM ( 36, "RESERVED PRIVATE", pad), 099/*062*/ new IFB_LLHBINARY( 59, "PAYMENT SERVICE FIELDS"), 100/*063*/ new IFB_LLHBINARY(255, "SMS PRIVATE-USE FIELDS"), 101/*064*/ new IFB_BINARY ( 8, "MESSAGE AUTHENTICATION CODE FIELD"), 102/*065*/ new IFB_BINARY ( 1, "BITMAP, EXTENDED"), 103/*066*/ new IFB_NUMERIC ( 1, "SETTLEMENT CODE", true), 104/*067*/ new IFB_NUMERIC ( 2, "EXTENDED PAYMENT CODE", true), 105/*068*/ new IFB_NUMERIC ( 3, "RECEIVING INSTITUTION COUNTRY CODE", true), 106/*069*/ new IFB_NUMERIC ( 3, "SETTLEMENT INSTITUTION COUNTRY CODE", true), 107/*070*/ new IFB_NUMERIC ( 3, "NETWORK MANAGEMENT INFORMATION CODE", true), 108/*071*/ new IFB_NUMERIC ( 4, "MESSAGE NUMBER", true), 109/*072*/ new IFB_NUMERIC ( 4, "MESSAGE NUMBER LAST", true), 110/*073*/ new IFB_NUMERIC ( 6, "DATE ACTION", true), 111/*074*/ new IFB_NUMERIC ( 10, "CREDITS NUMBER", true), 112/*075*/ new IFB_NUMERIC ( 10, "CREDITS REVERSAL NUMBER", true), 113/*076*/ new IFB_NUMERIC ( 10, "DEBITS NUMBER", true), 114/*077*/ new IFB_NUMERIC ( 10, "DEBITS REVERSAL NUMBER", true), 115/*078*/ new IFB_NUMERIC ( 10, "TRANSFER NUMBER", true), 116/*079*/ new IFB_NUMERIC ( 10, "TRANSFER REVERSAL NUMBER", true), 117/*080*/ new IFB_NUMERIC ( 10, "INQUIRIES NUMBER", true), 118/*081*/ new IFB_NUMERIC ( 10, "AUTHORIZATION NUMBER", true), 119/*082*/ new IFB_NUMERIC ( 12, "CREDITS, PROCESSING FEE AMOUNT", true), 120/*083*/ new IFB_NUMERIC ( 12, "CREDITS, TRANSACTION FEE AMOUNT", true), 121/*084*/ new IFB_NUMERIC ( 12, "DEBITS, PROCESSING FEE AMOUNT", true), 122/*085*/ new IFB_NUMERIC ( 12, "DEBITS, TRANSACTION FEE AMOUNT", true), 123/*086*/ new IFB_NUMERIC ( 16, "CREDITS, AMOUNT", true), 124/*087*/ new IFB_NUMERIC ( 16, "CREDITS, REVERSAL AMOUNT", true), 125/*088*/ new IFB_NUMERIC ( 16, "DEBITS, AMOUNT", true), 126/*089*/ new IFB_NUMERIC ( 16, "DEBITS, REVERSAL AMOUNT", true), 127/*090*/ new IFB_NUMERIC ( 42, "ORIGINAL DATA ELEMENTS", true), 128/*091*/ new IFE_CHAR ( 1, "FILE UPDATE CODE"), 129/*092*/ new IFE_CHAR ( 2, "FILE SECURITY CODE"), 130/*093*/ new IFE_CHAR ( 5, "RESPONSE INDICATOR"), 131/*094*/ new IFE_CHAR ( 7, "SERVICE INDICATOR"), 132/*095*/ new IFE_CHAR ( 42, "REPLACEMENT AMOUNTS"), 133/*096*/ new IFB_BINARY ( 8, "MESSAGE SECURITY CODE"), 134/*097*/ new IFB_AMOUNT ( 17, "AMOUNT, NET SETTLEMENT", pad), 135/*098*/ new IFE_CHAR ( 25, "PAYEE"), 136/*099*/ new IFB_LLHNUM ( 11, "SETTLEMENT INSTITUTION IDENT CODE", pad), 137/*100*/ new IFB_LLHNUM ( 11, "RECEIVING INSTITUTION IDENT CODE", pad), 138/*101*/ new IFB_LLHECHAR( 17, "FILE NAME"), 139/*102*/ new IFB_LLHCHAR ( 28, "ACCOUNT IDENTIFICATION 1"), 140/*103*/ new IFB_LLHCHAR ( 28, "ACCOUNT IDENTIFICATION 2"), 141/*104*/ new IFB_LLHCHAR ( 99, "TRANSACTION DESCRIPTION"), 142/*105*/ new IFB_LLHCHAR ( 99, "RESERVED ISO USE"), 143/*106*/ new IFB_LLHCHAR ( 99, "RESERVED ISO USE"), 144/*107*/ new IFB_LLHCHAR ( 99, "RESERVED ISO USE"), 145/*108*/ new IFB_LLHCHAR ( 99, "RESERVED ISO USE"), 146/*109*/ new IFB_LLHCHAR ( 99, "RESERVED ISO USE"), 147/*110*/ new IFB_LLHCHAR ( 99, "RESERVED ISO USE"), 148/*111*/ new IFB_LLHCHAR ( 99, "RESERVED ISO USE"), 149/*112*/ new IFB_LLHCHAR ( 99, "RESERVED NATIONAL USE"), 150/*113*/ new IFB_LLHCHAR ( 99, "RESERVED NATIONAL USE"), 151/*114*/ new IFB_LLHCHAR ( 99, "RESERVED NATIONAL USE"), 152/*115*/ new IFB_LLHCHAR ( 24, "ADDITIONAL TRACE DATA 1"), 153/*116*/ new IFB_LLHCHAR ( 99, "RESERVED NATIONAL USE"), 154/*117*/ new IFB_LLHCHAR ( 99, "RESERVED NATIONAL USE"), 155/*118*/ new IFB_LLHBINARY( 99, "INTRA-COUNTRY DATA"), 156/*119*/ new IFB_LLHCHAR ( 99, "RESERVED NATIONAL USE"), 157/*120*/ new IFB_LLHNUM ( 4, "RESERVED PRIVATE USE", pad), 158/*121*/ new IFB_LLHCHAR ( 11, "ISSUING INSTITUTION IDENT CODE"), 159/*122*/ new IFB_LLHCHAR ( 13, "REMAINING OPEN-TO-USE"), 160/*123*/ new IFB_LLHECHAR( 29, "ADDRESS VERIFICATION DATA"), 161/*124*/ new IFB_LLHBINARY( 99, "FREE-FORM TEXT-JAPAN"), 162/*125*/ new IFB_LLHCHAR ( 99, "SUPPORTING INFORMATION"), 163/*126*/ new ISOMsgFieldPackager( 164 new IFB_LLHBINARY (255, "Field 126"), 165 new F126Packager()), 166/*127*/ new ISOMsgFieldPackager( 167 new IFB_LLHBINARY (255, "FILE RECORD(S) ACTION/DATA"), 168 new F127Packager()), 169/*128*/ new IFB_BINARY ( 8, "MAC 2") 170 }; 171 172 protected static class F126Packager extends Base1SubFieldPackager 173 { 174 protected ISOFieldPackager fld126[] = 175 { 176 new Base1_BITMAP126(16, "Bit Map"), 177 new IFE_CHAR (25, "Customer Name"), 178 new IFE_CHAR (57, "Customer Address"), 179 new IFE_CHAR (57, "Biller Address"), 180 new IFE_CHAR (18, "Biller Telephone Number"), 181 new IFE_CHAR (6, "Process By Date"), 182 new IFB_LLNUM (17, "Cardholder Cert Serial Number", true), 183 new IFB_LLNUM (17, "Merchant Cert Serial Number", true), 184 new IFB_NUMERIC (40, "Transaction ID", true), 185 new IFB_NUMERIC (40, "TransStain", true), 186 new IFE_CHAR (6, "CVV2 Request Data"), 187 }; 188 189 protected F126Packager () 190 { 191 super(); 192 setFieldPackager(fld126); 193 } 194 } 195 196 protected static class F127Packager extends ISOBasePackager 197 { 198 protected ISOFieldPackager fld127[] = 199 { 200 new IFE_CHAR (1, "FILE UPDATE COD"), 201 new IFB_LLHNUM (19, "ACCOUNT NUMBER", true), 202 new IFB_NUMERIC (4, "PURGE DATE", true), 203 new IFE_CHAR (2, "ACTION CODE"), 204 new IFE_CHAR (9, "REGION CODING"), 205 new IFB_NUMERIC (4, "FILLER", true), 206 }; 207 protected F127Packager () 208 { 209 super(); 210 setFieldPackager(fld127); 211 } 212 } 213 214 public Base1Packager() 215 { 216 super(); 217 setFieldPackager(base1Fld); 218 } 219} 220