code: def crc(msg, encode=False):
      
  
      # the polynominal generattor code for CRC [1111111111111010000001001]
      generator = np.array([1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1,0,0,1])
      ng = len(generator)
  
      msgnpbin = bin2np(hex2bin(msg))
  
      if encode:
          msgnpbin[-24:] = [0] * 24
  
      # loop all bits, except last 24 piraty bits
      for i in range(len(msgnpbin)-24):
          if msgnpbin[i] == 0:
              continue
  
          # perform XOR, when 1
          msgnpbin[i:i+ng] = np.bitwise_xor(msgnpbin[i:i+ng], generator)
  
      # last 24 bits
      reminder = np2bin(msgnpbin[-24:])
      return reminder
docs: Mode-S Cyclic Redundancy Check
      Detect if bit error occurs in the Mode-S message
      Args:
          msg (string): 28 bytes hexadecimal message string
          encode (bool): True to encode the date only and return the checksum
      Returns:
          string: message checksum, or partity bits (encoder)