diff --git a/project/src/com/openbravo/pos/util/RFIDEncoding.java b/project/src/com/openbravo/pos/util/RFIDEncoding.java
--- a/project/src/com/openbravo/pos/util/RFIDEncoding.java
+++ b/project/src/com/openbravo/pos/util/RFIDEncoding.java
@@ -9,6 +9,7 @@
 
 package com.openbravo.pos.util;
 
+import java.math.BigInteger;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -128,7 +129,12 @@
     String binaryItemReferenceString = StringUtils.leftPad(
         Integer.toBinaryString(Integer.valueOf(itemReference)), numberOfBitsOfItemReference, "0");
     String binarySerialNumberString = StringUtils
-        .leftPad(Integer.toBinaryString(Integer.valueOf(serialNumber)), 38, "0");
+        .leftPad((new BigInteger(serialNumber)).toString(2), 38, "0");
+    // if binary serial number length is higher than 38 chars, it is one error, and it generates one
+    // exception in HW Manager. To prevent it, we will cut the first digits
+    if (binarySerialNumberString.length()>38) {
+      binarySerialNumberString = binarySerialNumberString.substring(0, 38);
+    }
 
     String binaryString = binaryHeaderString + binaryFilterString + binaryPartitionString
         + binaryCompanyPrefixString + binaryItemReferenceString + binarySerialNumberString;
