DrDiettrich:
XOR funktioniert nicht mit den ersten paar Beispielen. Ich tippe auf Summe der Nibbles.
Ich habe ein wenig gespielt 
Und zusätzlich noch einen weiteren Datensatz von der Website geholt.
Summe der Nibbles, Modulo 16, und das Ergebnis negiert:
Das gibt stimmige Ergebnisse in 8 von 9 Fällen (Fehler nur bei Datensatz 5).
Hier der sehr provisorische Sketch:
/*
TESTDATEN
0: 11110000000011100011001101011000100110001010110100010100000000111111 0000
1: 11110001000011100011001101011000100110001010110100010100000000111111 1111
2: 11110010000011100011001101011000100110001010110100010100000000111111 1110
3: 11110011000011100011001101011000100110001010110100010100000000111111 1101
4: 11110100000011100011001101011000100110001010110100010100000000111111 1100
5: 11100011000011100011001101011000100110001010110100010100000000111111 0010 // ???
6: 11100011000011100011000001011000100110001010110100010100000101111111 1100
7: 11100011000011100010110101011000100110001010110100010100000110111111 1100
8: 11110011100011100011001101011000100110001010110100010101000011001111 1011 // von https://github.com/pascaltippelt/Wamsler-IR-Remote
*/
byte test[9][18] = {
// 0:
{ 0b1111, 0b0000, 0b0000, 0b1110,
0b0011, 0b0011, 0b0101, 0b1000,
0b1001, 0b1000, 0b1010, 0b1101,
0b0001, 0b0100, 0b0000, 0b0011,
0b1111, 0b0000
},
// 1:
{ 0b1111, 0b0001, 0b0000, 0b1110,
0b0011, 0b0011, 0b0101, 0b1000,
0b1001, 0b1000, 0b1010, 0b1101,
0b0001, 0b0100, 0b0000, 0b0011,
0b1111, 0b1111
},
// 2:
{ 0b1111, 0b0010, 0b0000, 0b1110,
0b0011, 0b0011, 0b0101, 0b1000,
0b1001, 0b1000, 0b1010, 0b1101,
0b0001, 0b0100, 0b0000, 0b0011,
0b1111, 0b1110
},
// 3:
{ 0b1111, 0b0011, 0b0000, 0b1110,
0b0011, 0b0011, 0b0101, 0b1000,
0b1001, 0b1000, 0b1010, 0b1101,
0b0001, 0b0100, 0b0000, 0b0011,
0b1111, 0b1101
},
// 4:
{ 0b1111, 0b0100, 0b0000, 0b1110,
0b0011, 0b0011, 0b0101, 0b1000,
0b1001, 0b1000, 0b1010, 0b1101,
0b0001, 0b0100, 0b0000, 0b0011,
0b1111, 0b1100
},
// 5:
{ 0b1110, 0b0011, 0b0000, 0b1110,
0b0011, 0b0011, 0b0101, 0b1000,
0b1001, 0b1000, 0b1010, 0b1101,
0b0001, 0b0100, 0b0000, 0b0011,
0b1111, 0b0010
},
// 6:
{ 0b1110, 0b0011, 0b0000, 0b1110,
0b0011, 0b0000, 0b0101, 0b1000,
0b1001, 0b1000, 0b1010, 0b1101,
0b0001, 0b0100, 0b0001, 0b0111,
0b1111, 0b1100
},
// 7:
{ 0b1110, 0b0011, 0b0000, 0b1110,
0b0010, 0b1101, 0b0101, 0b1000,
0b1001, 0b1000, 0b1010, 0b1101,
0b0001, 0b0100, 0b0001, 0b1011,
0b1111, 0b1100
},
{ 0b1111, 0b0011, 0b1000, 0b1110,
0b0011, 0b0011, 0b0101, 0b1000,
0b1001, 0b1000, 0b1010, 0b1101,
0b0001, 0b0101, 0b0000, 0b1100,
0b1111, 0b1011
}
};
void setup() {
Serial.begin(9600);
for (byte i = 0; i < 9; i++) {
uint16_t summe = 0;
for (byte j = 0; j < 17; j++) {
summe = summe + test[i][j];
}
uint8_t myCheck = summe % 16; // Summe der Nibbles % 16
uint8_t myCheckNot = ~ (myCheck + 0b11110000); // Reduzieren auf 4 Bit und Negation
Serial.print(summe);
Serial.print('\t');
Serial.print(myCheck);
Serial.print('\t');
Serial.print(myCheckNot, BIN);
Serial.print('\t');
Serial.print(test[i][17], BIN);
Serial.print('\t');
if (test[i][17] == myCheckNot) Serial.print("OK");
Serial.println();
}
}
void loop() { }
8 von 9 Fälle passend ist natürlich nicht der ganz große Durchbruch 
Könnte aber auch sein, dass es im Datensatz 5 einen Fehler gibt.
Oder der Ansatz ist falsch.
Naja für Bletchley Park wäre das schon mal nicht sooo schlecht 
Wenn der TO noch ein paar zusätzliche Datensätze (Telegramme) zur Verfügung stellen könnte...