https://mode-s.org/1090mhz/content/mode-s/1-basics.html



p(x)：crc计算结果

符号解释
A：是ICAO地址
P：是后24位置零，crc的计算结果，任何消息都能算这个值
AP=A^P

异或可逆性性
AP = A^P
A = AP^P
P = AP^A
DP = BDS^AAA^P  //DP是数据奇偶校验，目前没看到那种24位，存这种东西


df = 11 17 18 ：      消息后24位存放P,   A明文存放在消息中,直接获取
df = 0 4  5  16 20 21   消息后24位存放AP， 先计算P，然后根据 A=AP^P 计算出A


// 上面这个df  pyModeS-master 项目 源码py_common.py ：119
// pyModeS-master项目 作者也是  那个文档的作者

def icao(msg: str) -> Optional[str]:
"""Calculate the ICAO address from an Mode-S message.

    Applicable only with DF4, DF5, DF20, DF21 messages.

    Args:
        msg (String): 28 bytes hexadecimal message string

    Returns:
        String: ICAO address in 6 bytes hexadecimal string

    """
    addr: Optional[str]
    DF = df(msg)

    if DF in (11, 17, 18):
        addr = msg[2:8]
    elif DF in (0, 4, 5, 16, 20, 21):
        c0 = crc(msg, encode=True)
        c1 = int(msg[-6:], 16)
        addr = "%06X" % (c0 ^ c1)
    else:
        addr = None

    return addr
