code: public boolean isValidInternal(Class < T > javaClass,
              CobolContext cobolContext, byte[] hostData, int start) {
  
          int end = start + getBytesLen();
  
          int[] nibbles = new int[2];
  
          // check all bytes excluding sign
          // all right hand size nibbles must contain a digit
          for (int i = start + (signLeading ? 1 : 0); i < end
                  - (signLeading ? 0 : 1); i++) {
              setNibbles(nibbles, hostData[i]);
              if (!isDigit(nibbles[1])) {
                  return false;
              }
          }
  
          // check the sign
          if (signSeparate) {
              int separateSign = (signLeading ? hostData[start]
                      : hostData[end - 1]) & 0xFF;
              if (separateSign != cobolContext.getHostPlusSign()
                      && separateSign != cobolContext.getHostMinusSign()) {
                  return false;
              }
          } else {
              setNibbles(nibbles, signLeading ? hostData[start]
                      : hostData[end - 1]);
              if (!isDigit(nibbles[1])) {
                  return false;
              }
              if (isSigned()) {
                  if (nibbles[0] != cobolContext.getPositiveSignNibbleValue()
                          && nibbles[0] != cobolContext
                                  .getNegativeSignNibbleValue()) {
                      return false;
                  }
              } else {
                  if (nibbles[0] != cobolContext.getUnspecifiedSignNibbleValue()) {
                      return false;
                  }
              }
          }
  
          return true;
      }
docs: {@inheritDoc}