def validate_header(xmin, xmax, natts, hoff):
    """Function to validate the header parsed from vstruct
       If the header check fails, it's likely because we've found
       an INDEX table
       1. T_XMIN - this is a transaction ID and is assoicated with the when
          the row was inserted. SHOULD NEVER BE 0.
       2. T_XMAX - Refers to the last time a row is visible.
          This is the transaction ID that identifies when this row was deleted.
       3. T_CID - a composite field that can be used to backtrack to a min and max
          command but is typically used when inserting or deleting so we can backtrack
          to the original version of the row.
       4. T_CTID - This stores a pointer to the current version of this row.
          When a row is updated, PostgreSQL will write a new version of the row
          and mark the old version as deleted (a new version of the row is written
          and the original row’s t_xmax field will gets a value). The t_ctid is 6 bytes
          – 4 bytes to store the BlockIdData (the physical location of the page in the database file)
          and the OffsetNumber (a 1-based index to a row on a disk page). Combining these two gives
          us the coordinates of the row on a page.
       5. T_NATTS -  information about NULLs, variable width columns, the current state of the row
          (is it in a transaction, the state of any transaction, how the row arrived at this location)
       8. T_HOFF - the size of the header including the size of the t_bits
          bitmap plus any associated padding that may be lurking about in the row.
          This cannot be less than 24 bytes, because that is the minumum length
          of row header
       9. T_BITS - is a variable length bitmap of null values. """

    if xmin == 0 or xmin > xmax:
        return False
    elif hoff < 24:
        return False
    elif natts == 0:
        return False

    return True