# CRC

Kode ziklikoek, CRC kode (Cyclic Redundancy Check) izena hartzen dute, baita polinomio kode izena ere. Hauen erabilera oso hedaturik dago, hardwarean modu erraz batean implementa daitezkeelako eta oso ahaltsuak direlako.
Kode hauek oinarri bezala G(X) polinomio eraikitzaile bat dute, r gradukoa eta printzipio hau ere oinarritzat daukate: n bit datu bitar baldin badauzkagu, hauek n-1 mailako polinomio baten koefiziente izan daitezke.
Adibidez, 10111 zenbaki bitarra x$^4$ + x$^2$ + x$^1$ + x$^0$ polinomiotzat tratatu dezakegu.
Datuak adierazten dituzten bit hauei, erredundantziako r bit gehitzen zaizkie horrela sortzen den polinomioa hasierako polinomioarekin zatigarria izan dadin. Hartzaileak jasotako polinomioa G(X)-ekin zatigarria den edo ez egiaztatuko du. Hau horrela ez bada, [transmisio errore] bat egongo da.
Datu-bitak blokeetan zatitzen dira (ingelesez frame deiturikoak) eta bloke bakoitzari r gradua kalkulatzen zaio, zeinak blokearen egiaztapen sekuentzia (Frame Check Sequence, FCS, ingelesez) izena ere hartzen duen.
Hauek dira gehien erabiltzen diren polinomio eraikitzaileak:
CRC-12: x$^{12}$+ x$^{11}$ + x$^3$ + x$^2$ + x$^1$ + 1. 6 biteko fluxuak transmititzeko erabiltzen da, erredundantziako 12 bitekin batera. Beste era batera esanda, 6 biteko blokeak erabiltzen ditu eta 12 bitetik sortzen duen FCS bat gehitzen die.
CRC-16: x$^{16}$ + x$^{15}$ + x$^2$ + 1. 8 biteko fluxuetarako erabiltzen da, erredundantziarentzat 16 erabiliz. AEB-tan erabiltzen da nagusiki.
CRC-CCITT: x$^{16}$ + x$^{12}$ + x$^5$ + 1. 8 biteko fluxuetarako, erredundantziarentzat 16 erabiliz. Europan erabiltzen da nagusiki.
CRC-32: x$^{32}$ + x$^{26}$ + x$^{23}$ + x$^{22}$ + x$^{16}$ + x$^{12}$ + x$^{11}$ + x$^{10}$ + x$^8$ + x$^7$ + x$^5$ + x$^4$ + x$^2$ + x + 1. 16 biteko CRC kodeek baino segurtasun handiagoa eskaintzen du, azken hauek nahikoa eskaintzen duten arren. Sare lokalen estandarren batzordean erabiltzen du (IEEE 802), hala nola AEB-en Defentsako departamentuak.
G(x)=x$^2$+1 motako polinomio eraikitzaile bat baldin badugu, CRC-k errore bakoiti guztiak antzeman ditzake, 2 biteko erredundantzia sortuko du eta ez da errore bikoitz guztiak antzemateko gai izango, adibidez, errore-balioko sekuentzia bat beti oharkabea litzateke.

## CRCaren erabilera

Adibide honetan, 14 biteko mezuari dagokion CRC kodea lortuko dugu. Erabiliko dugun CRC polinomioa x³+x+1 izango. 3.mailako polinomio honek 4 koefiziente ditu: 1.x³+0.x$^2$+1.x+1.x$^0$, beraz polinomioa bitar bezala idatziz 1,0,1,1. Eta emaitza 3 zenbakikoa izango da.
Erabiliko den mezua:
Lehenik 0ak sartuko ditugu eskuinetik. Polinomio zatitzailea izango denaren n luzera - 1 eginaz. Gure polinomio zatitzailea 1,0,1,1 da beraz 4-1=3 zero sartuko ditugu eskuinetik. 3-biteko CRCa lortzeko lehe zatiketa.
Zatiketa XOR eragiketa erabiliz egiten da. (XOR taula laburtua: 1-1=0; 0-0=0; 1-0=1; 0-1=1). Ezkerraldeko bit zenbakitzailea 0 denean ez da ezer egiten:
Mezua ongi bidalia izan dela egiaztatzeko, hartzaileak, bidalitako trama osoaren -datu bitak + CRC kodea- zatiketa berriro egitea besterik ez du. Oraingoan, errorerik ez baldin badago emaitza 0 izango da.

## Ikus, gainera

* CRC-ren azalpena ingelesez

## Kanpo estekak

* Datuak: Q245471