The technique of associating extra bits or bytes with a block of data, that are transmitted or stored with the data, and can be easily recomputed when the data is retrieved or received. If the results don't match, then that means some bit or bits of the data have been modified in transit.
These redundant bits are typically a lot fewer than the data bits, so they introduce less overhead than, say, simply storing or transmitting multiple entire copies of the data. Naturally there is a tradeoff between overhead and robustness.
Different degrees of redundancy can protect against different likelihoods of data corruption, from the most basic sum(1) checksum, through the slightly more elaborate CRC, all the way to Error-Correcting Codes and CryptographicHashes.