รหัส Cyclic Redundancy Check (CRC) เป็นรหัสที่ใช้ในการตรวจสอบความผิดพลาดของข้อมูล โดยมีลักษณะคล้าย Hash แต่มีความซับซ้อนและขนาดผลลัพธ์การคำนวณน้อยกว่า (ขนาดไม่เกิน 64 บิต ในขณะที่ Hash นั้นมีขนาดมากกว่า 128 บิต) รหัส CRC ถูกใช้ในการรับส่งข้อมูลที่มีการเข้าจังหวะ (Synchronous) และการสื่อสารข้อมูลที่ต้องการความรวดเร็วในการตรวจสอบความผิดพลาดของข้อมูล หลักการของ CRC จะใช้โพลีโนเมียล (Polynomial) มาเป็นค่าตัวหาร (Divisor) ซึ่งมีข้อกำหนดว่าบิตซ้ายสุดและบิตขวาสุดต้องมีค่าเท่ากับ 1 เสมอ อีกทั้งโพลิโนเมียลจะต้องมีจำนวนบิตน้อยกว่าจำนวนบิตของข้อมูล ในการหาค่า CRC สามารถทำได้โดยอาศัยตัวดำเนินการ Exclusive-OR หากบิตตรงกันผลที่ได้จะเท่ากับ 0 ในขณะที่บิตต่างกัน ผลที่ได้ก็จะเท่ากับ 1 การเข้ารหัสแบบ CRC ในมาตรฐาน 5G สำหรับแบบ Uplink และ Downlink ใช้การเข้ารหัส CRC ขนาด 24, 16, 11 และ 6 บิต โดยมีการกำหนดโพลิโนเมียลตัวหารดังนี้
- สำหรับการเข้ารหัส CRC 24 บิต
\(\begin{array}{l}{{g}_{{\text{CRC24A}}}}(X)={{X}^{{24}}}+{{X}^{{23}}}+{{X}^{{18}}}+{{X}^{{17}}}+{{X}^{{14}}}+{{X}^{{11}}}+{{X}^{{10}}}+{{X}^{7}}+{{X}^{6}}+{{X}^{5}}+{{X}^{4}}+{{X}^{3}}\\\quad \quad \quad \quad \quad +X+1\end{array}\)
\({{g}_{{\text{CRC24B}}}}(X)={{X}^{{24}}}+{{X}^{{23}}}+{{X}^{6}}+{{X}^{5}}+X+1\)
\(\displaystyle {{g}_{{\text{CRC24C}}}}(X)={{X}^{{24}}}+{{X}^{{23}}}+{{X}^{{21}}}+{{X}^{{20}}}+{{X}^{{17}}}+{{X}^{{15}}}+{{X}^{{13}}}+{{X}^{{12}}}+{{X}^{8}}+{{X}^{4}}+{{X}^{2}}+X+1\)
- สำหรับการเข้ารหัส CRC 16 บิต
\({{g}_{{\text{CRC16}}}}(X)={{X}^{{16}}}+{{X}^{{12}}}+{{X}^{5}}+1\)
- สำหรับการเข้ารหัส CRC 11 บิต
\({{g}_{{\text{CRC11}}}}(X)={{X}^{{11}}}+{{X}^{{10}}}+{{X}^{9}}+{{X}^{5}}+1\)
- สำหรับการเข้ารหัส CRC 6 บิต
\({{g}_{{\text{CRC6}}}}(X)={{X}^{6}}+{{X}^{5}}+1\)
โดยขนาดของการเข้ารหัส CRC และโพลิโนเมียลตัวหารดังกล่าวได้มีการพิสูจน์แล้วว่าเพียงพอสำหรับการใช้ตรวจสอบความผิดพลาดข้อมูลสำหรับช่องสัญญาณข้อมูล อย่างไรก็ตาม สำหรับกระบวนการเข้ารหัสช่องสัญญาณสำหรับช่องสัญญาณข้อมูลในมาตรฐาน 5G ประกอบด้วยการเข้ารหัส CRC 2 ส่วนได้แก่ การเข้ารหัส CRC ในส่วนของบล็อกการขนส่ง (Transport Block) และการเข้ารหัส CRC ในส่วนของบล็อกรหัสดังนี้
- การเข้ารหัส CRC ในส่วนของบล็อกการขนส่ง เป็นการเข้ารหัส CRC ข้อมูลทั้งหมดที่ต้องการส่งไปยังภาครับ โดยมีการแบ่งออกเป็น 2 กรณีได้แก่ กรณีข้อมูลมีความยาวมากกว่า 3824 บิต กำหนดให้ใช้การเข้ารหัส CRC ขนาด 24 บิต มีโพลิโนเมียลเป็น \({{g}_{{\text{CRC24A}}}}(X)\) หากเป็นกรณีอื่น กำหนดให้ใช้การเข้ารหัส CRC ขนาด 16 บิตมีโพลิโนเมียลเป็น \({{g}_{{\text{CRC16}}}}(X)\)
- การเข้ารหัส CRC ในส่วนของบล็อกรหัสเป็นการเข้ารหัส CRC ข้อมูลแต่ละบล็อกย่อย ๆ หลังผ่านกระบวนการ Segmentation เนื่องจากเมื่อทำการแบ่งข้อมูลเป็นบล็อกย่อย ข้อมูลบางบล็อกเป็นเพียงข้อมูลบางส่วนของข้อมูลเริ่มต้นที่ต้องการส่งไปยังภาครับ ดังนั้นจึงมีการเข้ารหัส CRC ข้อมูลแต่ละบล็อกย่อย ๆ เพื่อใช้ในการตรวจสอบความผิดพลาดของข้อมูลแต่ละบล็อกย่อยในภาครับ โดยมีการกำหนดให้ใช้การเข้ารหัส CRC ขนาด 24 บิต มีโพลิโนเมียลเป็น \({{g}_{{\text{CRC24B}}}}(X)\)