org.jpos.iso
Class ISOUtil

java.lang.Object
  extended by org.jpos.iso.ISOUtil

public class ISOUtil
extends java.lang.Object

varios functions needed to pack/unpack ISO-8583 fields

Version:
$Id: ISOUtil.java 2606 2008-02-12 22:47:26Z apr $
Author:
apr@cs.com.uy, Hani S. Kirollos, Alwyn Schoeman
See Also:
ISOComponent

Field Summary
static byte[] ASCII2EBCDIC
           
static byte[] EBCDIC2ASCII
           
static byte ETX
           
static byte FS
           
static byte GS
           
static byte RS
           
static byte STX
           
static byte US
           
 
Constructor Summary
ISOUtil()
           
 
Method Summary
static byte[] asciiToEbcdic(byte[] a)
           
static byte[] asciiToEbcdic(java.lang.String s)
           
static void asciiToEbcdic(java.lang.String s, byte[] e, int offset)
           
static java.lang.String bcd2str(byte[] b, int offset, int len, boolean padLeft)
          converts a BCD representation of a number to a String
static byte[] bitSet2byte(java.util.BitSet b)
          converts a BitSet into a binary field used in pack routines
static byte[] bitSet2byte(java.util.BitSet b, int bytes)
          converts a BitSet into a binary field used in pack routines
static byte[] bitSet2extendedByte(java.util.BitSet b)
          Converts a BitSet into an extended binary field used in pack routines.
static java.lang.String bitSet2String(java.util.BitSet b)
          bit representation of a BitSet suitable for dumps and debugging
static java.lang.String blankUnPad(java.lang.String s)
          Right unPad with ' '
static java.util.BitSet byte2BitSet(java.util.BitSet bmap, byte[] b, int bitOffset)
          Converts a binary representation of a Bitmap field into a Java BitSet
static java.util.BitSet byte2BitSet(byte[] b, int offset, boolean bitZeroMeansExtended)
          Converts a binary representation of a Bitmap field into a Java BitSet
static java.util.BitSet byte2BitSet(byte[] b, int offset, int maxBits)
          Converts a binary representation of a Bitmap field into a Java BitSet
static byte[] concat(byte[] array1, byte[] array2)
          Concatenates two byte arrays (array1 and array2)
static byte[] concat(byte[] array1, int beginIndex1, int length1, byte[] array2, int beginIndex2, int length2)
          Concatenates two byte arrays (array1 and array2)
static java.lang.String dumpString(byte[] b)
          converts a byte array to printable characters
static java.lang.String ebcdicToAscii(byte[] e)
           
static java.lang.String ebcdicToAscii(byte[] e, int offset, int len)
           
static byte[] ebcdicToAsciiBytes(byte[] e)
           
static byte[] ebcdicToAsciiBytes(byte[] e, int offset, int len)
           
static java.lang.String formatAmount(long l, int len)
          prepare long value used as amount for display (implicit 2 decimals)
static java.lang.String formatDouble(double d, int len)
          format double value
static java.util.BitSet hex2BitSet(java.util.BitSet bmap, byte[] b, int bitOffset)
          Converts an ASCII representation of a Bitmap field into a Java BitSet
static java.util.BitSet hex2BitSet(byte[] b, int offset, boolean bitZeroMeansExtended)
          Converts an ASCII representation of a Bitmap field into a Java BitSet
static java.util.BitSet hex2BitSet(byte[] b, int offset, int maxBits)
          Converts an ASCII representation of a Bitmap field into a Java BitSet
static byte[] hex2byte(byte[] b, int offset, int len)
           
static byte[] hex2byte(java.lang.String s)
           
static java.lang.String hexdump(byte[] b)
           
static java.lang.String hexdump(byte[] b, int offset, int len)
           
static java.lang.String hexor(java.lang.String op1, java.lang.String op2)
          Bitwise XOR between corresponding byte arrays represented in hex
static java.lang.String hexString(byte[] b)
          converts a byte array to hex string (suitable for dumps and ASCII packaging of Binary fields
static java.lang.String hexString(byte[] b, int offset, int len)
          converts a byte array to hex string (suitable for dumps and ASCII packaging of Binary fields
static boolean isAlphaNumeric(java.lang.String s)
          Return true if the string is alphanum.
static boolean isBlank(java.lang.String s)
           
static boolean isNumeric(java.lang.String s, int radix)
          Return true if the string represent a number in the specified radix.
static boolean isZero(java.lang.String s)
           
static java.lang.String normalize(java.lang.String s)
          XML normalizer (default canonical)
static java.lang.String normalize(java.lang.String s, boolean canonical)
          XML normalizer
static java.lang.String padleft(java.lang.String s, int len, char c)
          pad to the left
static int parseInt(byte[] bArray)
          Converts a byte array to an integer of radix 10.
static int parseInt(byte[] bArray, int radix)
          Converts a byte array to an integer of base radix.
static int parseInt(char[] cArray)
          Converts a character array to an integer of radix 10.
static int parseInt(char[] cArray, int radix)
          Converts a character array to an integer of base radix.
static int parseInt(java.lang.String s)
          Converts a String to an integer of radix 10.
static int parseInt(java.lang.String s, int radix)
          Converts a String to an integer of base radix.
static java.lang.String protect(java.lang.String s)
          Protects PAN, Track2, CVC (suitable for logs).
static void sleep(long millis)
          Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds.
static byte[] str2bcd(java.lang.String s, boolean padLeft)
          converts to BCD
static byte[] str2bcd(java.lang.String s, boolean padLeft, byte fill)
          converts to BCD
static byte[] str2bcd(java.lang.String s, boolean padLeft, byte[] d, int offset)
          converts to BCD
static java.lang.String strpad(java.lang.String s, int len)
          pads to the right
static java.lang.String strpadf(java.lang.String s, int len)
          pads a string with 'F's (useful for pinoffset management)
static int[] toIntArray(java.lang.String s)
           
static java.lang.String[] toStringArray(java.lang.String s)
           
static byte[] trim(byte[] array, int length)
          Trims a byte[] to a certain length
static java.lang.String trim(java.lang.String s)
          trim String (if not null)
static java.lang.String trimf(java.lang.String s)
          reverse the effect of strpadf
static java.lang.String unPadLeft(java.lang.String s, char c)
          Unpad from left.
static java.lang.String unPadRight(java.lang.String s, char c)
          Unpad from right.
static byte[] xor(byte[] op1, byte[] op2)
          Bitwise XOR between corresponding bytes
static java.lang.String zeropad(java.lang.String s, int len)
          left pad with '0'
static java.lang.String zeropadRight(java.lang.String s, int len)
           
static java.lang.String zeroUnPad(java.lang.String s)
          Left unPad with '0'
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

EBCDIC2ASCII

public static final byte[] EBCDIC2ASCII

ASCII2EBCDIC

public static final byte[] ASCII2EBCDIC

STX

public static final byte STX
See Also:
Constant Field Values

FS

public static final byte FS
See Also:
Constant Field Values

US

public static final byte US
See Also:
Constant Field Values

RS

public static final byte RS
See Also:
Constant Field Values

GS

public static final byte GS
See Also:
Constant Field Values

ETX

public static final byte ETX
See Also:
Constant Field Values
Constructor Detail

ISOUtil

public ISOUtil()
Method Detail

ebcdicToAscii

public static java.lang.String ebcdicToAscii(byte[] e)

ebcdicToAscii

public static java.lang.String ebcdicToAscii(byte[] e,
                                             int offset,
                                             int len)

ebcdicToAsciiBytes

public static byte[] ebcdicToAsciiBytes(byte[] e)

ebcdicToAsciiBytes

public static byte[] ebcdicToAsciiBytes(byte[] e,
                                        int offset,
                                        int len)

asciiToEbcdic

public static byte[] asciiToEbcdic(java.lang.String s)

asciiToEbcdic

public static byte[] asciiToEbcdic(byte[] a)

asciiToEbcdic

public static void asciiToEbcdic(java.lang.String s,
                                 byte[] e,
                                 int offset)

padleft

public static java.lang.String padleft(java.lang.String s,
                                       int len,
                                       char c)
                                throws ISOException
pad to the left

Parameters:
s - - original string
len - - desired len
c - - padding char
Returns:
padded string
Throws:
ISOException

trim

public static java.lang.String trim(java.lang.String s)
trim String (if not null)

Parameters:
s - String to trim
Returns:
String (may be null)

zeropad

public static java.lang.String zeropad(java.lang.String s,
                                       int len)
                                throws ISOException
left pad with '0'

Parameters:
s - - original string
len - - desired len
Returns:
zero padded string
Throws:
ISOException

strpad

public static java.lang.String strpad(java.lang.String s,
                                      int len)
pads to the right

Parameters:
s - - original string
len - - desired len
Returns:
space padded string

zeropadRight

public static java.lang.String zeropadRight(java.lang.String s,
                                            int len)

str2bcd

public static byte[] str2bcd(java.lang.String s,
                             boolean padLeft,
                             byte[] d,
                             int offset)
converts to BCD

Parameters:
s - - the number
padLeft - - flag indicating left/right padding
d - The byte array to copy into.
offset - Where to start copying into.
Returns:
BCD representation of the number

str2bcd

public static byte[] str2bcd(java.lang.String s,
                             boolean padLeft)
converts to BCD

Parameters:
s - - the number
padLeft - - flag indicating left/right padding
Returns:
BCD representation of the number

str2bcd

public static byte[] str2bcd(java.lang.String s,
                             boolean padLeft,
                             byte fill)
converts to BCD

Parameters:
s - - the number
padLeft - - flag indicating left/right padding
fill - - fill value
Returns:
BCD representation of the number

bcd2str

public static java.lang.String bcd2str(byte[] b,
                                       int offset,
                                       int len,
                                       boolean padLeft)
converts a BCD representation of a number to a String

Parameters:
b - - BCD representation
offset - - starting offset
len - - BCD field len
padLeft - - was padLeft packed?
Returns:
the String representation of the number

hexString

public static java.lang.String hexString(byte[] b)
converts a byte array to hex string (suitable for dumps and ASCII packaging of Binary fields

Parameters:
b - - byte array
Returns:
String representation

dumpString

public static java.lang.String dumpString(byte[] b)
converts a byte array to printable characters

Parameters:
b - - byte array
Returns:
String representation

hexString

public static java.lang.String hexString(byte[] b,
                                         int offset,
                                         int len)
converts a byte array to hex string (suitable for dumps and ASCII packaging of Binary fields

Parameters:
b - - byte array
offset - - starting position
len -
Returns:
String representation

bitSet2String

public static java.lang.String bitSet2String(java.util.BitSet b)
bit representation of a BitSet suitable for dumps and debugging

Parameters:
b - - the BitSet
Returns:
string representing the bits (i.e. 011010010...)

bitSet2byte

public static byte[] bitSet2byte(java.util.BitSet b)
converts a BitSet into a binary field used in pack routines

Parameters:
b - - the BitSet
Returns:
binary representation

bitSet2byte

public static byte[] bitSet2byte(java.util.BitSet b,
                                 int bytes)
converts a BitSet into a binary field used in pack routines

Parameters:
b - - the BitSet
bytes - - number of bytes to return
Returns:
binary representation

byte2BitSet

public static java.util.BitSet byte2BitSet(byte[] b,
                                           int offset,
                                           boolean bitZeroMeansExtended)
Converts a binary representation of a Bitmap field into a Java BitSet

Parameters:
b - - binary representation
offset - - staring offset
bitZeroMeansExtended - - true for ISO-8583
Returns:
java BitSet object

byte2BitSet

public static java.util.BitSet byte2BitSet(byte[] b,
                                           int offset,
                                           int maxBits)
Converts a binary representation of a Bitmap field into a Java BitSet

Parameters:
b - - binary representation
offset - - staring offset
maxBits - - max number of bits (supports 64,128 or 192)
Returns:
java BitSet object

byte2BitSet

public static java.util.BitSet byte2BitSet(java.util.BitSet bmap,
                                           byte[] b,
                                           int bitOffset)
Converts a binary representation of a Bitmap field into a Java BitSet

Parameters:
bmap - - BitSet
b - - hex representation
bitOffset - - (i.e. 0 for primary bitmap, 64 for secondary)
Returns:
java BitSet object

hex2BitSet

public static java.util.BitSet hex2BitSet(byte[] b,
                                          int offset,
                                          boolean bitZeroMeansExtended)
Converts an ASCII representation of a Bitmap field into a Java BitSet

Parameters:
b - - hex representation
offset - - starting offset
bitZeroMeansExtended - - true for ISO-8583
Returns:
java BitSet object

hex2BitSet

public static java.util.BitSet hex2BitSet(byte[] b,
                                          int offset,
                                          int maxBits)
Converts an ASCII representation of a Bitmap field into a Java BitSet

Parameters:
b - - hex representation
offset - - starting offset
maxBits - - max number of bits (supports 8, 16, 24, 32, 48, 52, 64,.. 128 or 192)
Returns:
java BitSet object

hex2BitSet

public static java.util.BitSet hex2BitSet(java.util.BitSet bmap,
                                          byte[] b,
                                          int bitOffset)
Converts an ASCII representation of a Bitmap field into a Java BitSet

Parameters:
bmap - - BitSet
b - - hex representation
bitOffset - - (i.e. 0 for primary bitmap, 64 for secondary)
Returns:
java BitSet object

hex2byte

public static byte[] hex2byte(byte[] b,
                              int offset,
                              int len)
Parameters:
b - source byte array
offset - starting offset
len - number of bytes in destination (processes len*2)
Returns:
byte[len]

hex2byte

public static byte[] hex2byte(java.lang.String s)
Parameters:
s - source string (with Hex representation)
Returns:
byte array

formatDouble

public static java.lang.String formatDouble(double d,
                                            int len)
format double value

Parameters:
amount - the amount
fieldLen - the field len
Returns:
a String of fieldLen characters (right justified)

formatAmount

public static java.lang.String formatAmount(long l,
                                            int len)
                                     throws ISOException
prepare long value used as amount for display (implicit 2 decimals)

Parameters:
l - value
len - display len
Returns:
formated field
Throws:
ISOException

normalize

public static java.lang.String normalize(java.lang.String s,
                                         boolean canonical)
XML normalizer

Parameters:
s - source String
canonical - true if we want to normalize \r and \n as well
Returns:
normalized string suitable for XML Output

normalize

public static java.lang.String normalize(java.lang.String s)
XML normalizer (default canonical)

Parameters:
s - source String
Returns:
normalized string suitable for XML Output

protect

public static java.lang.String protect(java.lang.String s)
Protects PAN, Track2, CVC (suitable for logs).
 "40000101010001" is converted to "400001____0001"
 "40000101010001=020128375" is converted to "400001____0001=0201_____"
 "123" is converted to "___"
 

Parameters:
s - string to be protected
Returns:
'protected' String

toIntArray

public static int[] toIntArray(java.lang.String s)

toStringArray

public static java.lang.String[] toStringArray(java.lang.String s)

xor

public static byte[] xor(byte[] op1,
                         byte[] op2)
Bitwise XOR between corresponding bytes

Parameters:
op1 - byteArray1
op2 - byteArray2
Returns:
an array of length = the smallest between op1 and op2

hexor

public static java.lang.String hexor(java.lang.String op1,
                                     java.lang.String op2)
Bitwise XOR between corresponding byte arrays represented in hex

Parameters:
op1 - hexstring 1
op2 - hexstring 2
Returns:
an array of length = the smallest between op1 and op2

trim

public static byte[] trim(byte[] array,
                          int length)
Trims a byte[] to a certain length

Parameters:
array - the byte[] to be trimmed
length - the wanted length
Returns:
the trimmed byte[]

concat

public static byte[] concat(byte[] array1,
                            byte[] array2)
Concatenates two byte arrays (array1 and array2)

Parameters:
array1 -
array2 -
Returns:
the concatenated array

concat

public static byte[] concat(byte[] array1,
                            int beginIndex1,
                            int length1,
                            byte[] array2,
                            int beginIndex2,
                            int length2)
Concatenates two byte arrays (array1 and array2)

Parameters:
array1 -
beginIndex1 -
length1 -
array2 -
beginIndex2 -
length2 -
Returns:
the concatenated array

sleep

public static void sleep(long millis)
Causes the currently executing thread to sleep (temporarily cease execution) for the specified number of milliseconds. The thread does not lose ownership of any monitors. This is the same as Thread.sleep () without throwing InterruptedException

Parameters:
millis - the length of time to sleep in milliseconds.

zeroUnPad

public static java.lang.String zeroUnPad(java.lang.String s)
Left unPad with '0'

Parameters:
s - - original string
Returns:
zero unPadded string

blankUnPad

public static java.lang.String blankUnPad(java.lang.String s)
Right unPad with ' '

Parameters:
s - - original string
Returns:
blank unPadded string

unPadRight

public static java.lang.String unPadRight(java.lang.String s,
                                          char c)
Unpad from right.

Parameters:
s - - original string
c - - padding char
Returns:
unPadded string.

unPadLeft

public static java.lang.String unPadLeft(java.lang.String s,
                                         char c)
Unpad from left.

Parameters:
s - - original string
c - - padding char
Returns:
unPadded string.

isZero

public static boolean isZero(java.lang.String s)
Returns:
true if the string is zero-filled ( 0 char filled )

isBlank

public static boolean isBlank(java.lang.String s)
Returns:
true if the string is blank filled (space char filled)

isAlphaNumeric

public static boolean isAlphaNumeric(java.lang.String s)
Return true if the string is alphanum. {letter digit (.) (_) (-) ( ) (?) }


isNumeric

public static boolean isNumeric(java.lang.String s,
                                int radix)
Return true if the string represent a number in the specified radix.


bitSet2extendedByte

public static byte[] bitSet2extendedByte(java.util.BitSet b)
Converts a BitSet into an extended binary field used in pack routines. The result is always in the extended format: (16 bytes of length)

Parameters:
b - the BitSet
Returns:
binary representation

parseInt

public static int parseInt(java.lang.String s,
                           int radix)
                    throws java.lang.NumberFormatException
Converts a String to an integer of base radix.

String constraints are:
  • Number must be less than 10 digits
  • Number must be positive
  • Parameters:
    s - String representation of number
    radix - Number base to use
    Returns:
    integer value of number
    Throws:
    java.lang.NumberFormatException

    parseInt

    public static int parseInt(java.lang.String s)
                        throws java.lang.NumberFormatException
    Converts a String to an integer of radix 10.

    String constraints are:
  • Number must be less than 10 digits
  • Number must be positive
  • Parameters:
    s - String representation of number
    Returns:
    integer value of number
    Throws:
    java.lang.NumberFormatException

    parseInt

    public static int parseInt(char[] cArray,
                               int radix)
                        throws java.lang.NumberFormatException
    Converts a character array to an integer of base radix.

    Array constraints are:
  • Number must be less than 10 digits
  • Number must be positive
  • Parameters:
    cArray - Character Array representation of number
    radix - Number base to use
    Returns:
    integer value of number
    Throws:
    java.lang.NumberFormatException

    parseInt

    public static int parseInt(char[] cArray)
                        throws java.lang.NumberFormatException
    Converts a character array to an integer of radix 10.

    Array constraints are:
  • Number must be less than 10 digits
  • Number must be positive
  • Parameters:
    cArray - Character Array representation of number
    Returns:
    integer value of number
    Throws:
    java.lang.NumberFormatException

    parseInt

    public static int parseInt(byte[] bArray,
                               int radix)
                        throws java.lang.NumberFormatException
    Converts a byte array to an integer of base radix.

    Array constraints are:
  • Number must be less than 10 digits
  • Number must be positive
  • Parameters:
    bArray - Byte Array representation of number
    radix - Number base to use
    Returns:
    integer value of number
    Throws:
    java.lang.NumberFormatException

    parseInt

    public static int parseInt(byte[] bArray)
                        throws java.lang.NumberFormatException
    Converts a byte array to an integer of radix 10.

    Array constraints are:
  • Number must be less than 10 digits
  • Number must be positive
  • Parameters:
    bArray - Byte Array representation of number
    Returns:
    integer value of number
    Throws:
    java.lang.NumberFormatException

    hexdump

    public static java.lang.String hexdump(byte[] b)
    Parameters:
    b - a byte[] buffer
    Returns:
    hexdump

    hexdump

    public static java.lang.String hexdump(byte[] b,
                                           int offset,
                                           int len)
    Parameters:
    b - a byte[] buffer
    offset - starting offset
    len - the Length
    Returns:
    hexdump

    strpadf

    public static java.lang.String strpadf(java.lang.String s,
                                           int len)
    pads a string with 'F's (useful for pinoffset management)

    Parameters:
    s - an [hex]string
    len - desired length
    Returns:
    string right padded with 'F's

    trimf

    public static java.lang.String trimf(java.lang.String s)
    reverse the effect of strpadf

    Parameters:
    s - F padded string
    Returns:
    trimmed string