CRC(Cyclic Redundancy Check, 순환 중복 검사)는 데이터가 손상되었는지 확인할 수 있는 오류 검증 코드다.

16비트, 32비트, 64비트 버전이 많이 쓰이며, 그 중 32비트 버전(CRC32)이 압도적으로 많이 쓰인다. 오죽하면 AMD64 등 21세기의 왠만한 현대 CPU들은 CRC32 연산을 가속할 수 있는 장치를 내장할 정도다.

애석하게도 이걸로 데이터를 정정하거나 데이터의 무결성을 완전히 검증할 수는 없는데, 아래 나오듯 나눗셈의 몫과 나머지를 이용하는 특성 상 같은 나머지를 가지는 서로 다른 데이터를 여러 개 만들 수 있기 때문이다. 이것은 정정 기능을 지닌 다른 ECC 알고리즘을 사용해야 한다.

검증 과정

편집
  1. 송신자와 수신자는 같은 생성 다항식(Generator Polynomials)을 공유한다. 이 다항식은 이진수의 자릿수 단위로 항이 있는 다항식이다.
  2. 송신자는 데이터를 생성 다항식으로 나눈 체크섬을 데이터 뒤에 추가한다.
  3. 수신자가 체크섬이 부착된 데이터를 정상적으로 받았다면 받은 데이터를 공유한 생성 다항식으로 나누면 0으로 나누어 떨어진다. 수신자가 다항식으로 나누어 0이 아닌 경우 오류가 발생했다는 점에 주의한다.