diff --git a/src/main/java/com/solab/iso8583/codecs/BigIntBcdCodec.java b/src/main/java/com/solab/iso8583/codecs/BigIntBcdCodec.java new file mode 100644 index 0000000..7ddb00b --- /dev/null +++ b/src/main/java/com/solab/iso8583/codecs/BigIntBcdCodec.java @@ -0,0 +1,40 @@ +package com.solab.iso8583.codecs; + +import com.solab.iso8583.CustomBinaryField; +import com.solab.iso8583.util.Bcd; + +import java.math.BigInteger; + +/** + * A custom field encoder/decoder to be used with LLBIN/LLLBIN fields + * that contain BigIntegers in BCD encoding. + * + * @author Enrique Zamudio + * Date: 07/05/13 13:02 + */ +public class BigIntBcdCodec implements CustomBinaryField { + + @Override + public BigInteger decodeBinaryField(byte[] value, int pos, int len) { + return Bcd.decodeToBigInteger(value, pos, len*2); + } + + @Override + public byte[] encodeBinaryField(BigInteger value) { + final String s = value.toString(10); + final byte[] buf = new byte[s.length() / 2 + s.length() % 2]; + Bcd.encode(s, buf); + return buf; + } + + @Override + public BigInteger decodeField(String value) { + return new BigInteger(value, 10); + } + + @Override + public String encodeField(BigInteger value) { + return value.toString(10); + } + +} diff --git a/src/main/java/com/solab/iso8583/codecs/LongBcdCodec.java b/src/main/java/com/solab/iso8583/codecs/LongBcdCodec.java new file mode 100644 index 0000000..e8c002b --- /dev/null +++ b/src/main/java/com/solab/iso8583/codecs/LongBcdCodec.java @@ -0,0 +1,37 @@ +package com.solab.iso8583.codecs; + +import com.solab.iso8583.CustomBinaryField; +import com.solab.iso8583.util.Bcd; + +/** + * A custom field encoder/decoder to be used with LLBIN/LLLBIN fields + * that contain Longs in BCD encoding. + * + * @author Enrique Zamudio + * Date: 07/05/13 13:02 + */ +public class LongBcdCodec implements CustomBinaryField { + + @Override + public Long decodeBinaryField(byte[] value, int pos, int length) { + return Bcd.decodeToLong(value, pos, length*2); + } + + @Override + public byte[] encodeBinaryField(Long value) { + final String s = Long.toString(value, 10); + final byte[] buf = new byte[s.length() / 2 + s.length() % 2]; + Bcd.encode(s, buf); + return buf; + } + + @Override + public Long decodeField(String value) { + return Long.parseLong(value, 10); + } + + @Override + public String encodeField(Long value) { + return value.toString(); + } +}