تاجاییکه من الان تحقیق کردم، crc عمدتا برای error detection هست و نه error correction.
البته ظاهرا به شکلی و تاحدودی میشه ازش برای error correction هم استفاده کرد، ولی کاراییش در این امر کاملا محدوده. یعنی اینطور بگم که اینطوری نیست که شما یه crc بذارید و بتونید باهاش هر خطایی رو رفع کنید. مثلا یه فایل که چند کیلوبایت هست اونوقت با یک crc که چند بایت بیشتر نیست چه تعدادی از خطاها رو میشه باهاش اصلاح کرد؟!
اگر دنبال قابلیت اصلاح خطای درست و حسابی هستید باید دنبال سیستمهایی گشت که مخصوصا برای همین طراحی شدن، یا این قابلیت هم یکی از اهدافشون بوده. طبیعتا اینطور سیستمها افزونگی متناسب با حجم دیتا رو هم دارن. مثلا فرض کنید 5% حجم خود دیتا رو دارن، نه اینکه یه حجم ثابت و ناچیز باشه. در اون حجم ثابت و ناچیز در مقابل دیتا، طبیعتا نمیشه اطلاعات کافی برای اصلاح خطاهایی که از چند بیت بیشتر هستن رو بدست آورد. معجزه که نیست! اگر میشد دیگه لازم نبود کل یک فایل ذخیره یا منتقل بشه، بجاش یک کد crc رو استفاده میکردن و بقیهء فایل رو از روی همون بدست میاوردن خب! اونوقت میشد اند فشرده سازی!! خطاهایی که اینطور سیستمها میتونن اصلاح کنن خیلی محدوده و بنظرم با حجم دیتا هم رابطهء معکوس داره. یعنی وقتی حجم دیتا خیلی کم باشه، اونوقت میتونن عملا برای چنین کاربردی هم مفید باشن، ولی وقت حجم دیتا زیاد باشه و خطاهای ممکن از چند بیت خیلی بیشتر باشن دیگه کاری ازشون برنمیاد (مثل هش فقط میتونن رخداد خطا رو تشخیص بدن، و نهایت شاید بتونن یه محدوده و شکلی رو برای خطای رخ داده مشخص کنن؛ یعنی مثلا بگه خطا توی محدوده بایت 120 تا 400 بوده، و شاید درمورد تعداد بیت های دچار خطا شده هم بتونه چیزی بگه یا تخمینی بزنه و چندین حالات احتمالی و این حرفها).
چند مطلب در این مورد که نگاهی انداختم:
http://stackoverflow.com/questions/3...ction-with-crc
http://stackoverflow.com/questions/3...587616#8587616
http://stackoverflow.com/questions/9...ection-library