Mã hóa CRC là gì

Vì vậy bạn cần sử dụng định dạng “%u”  khi dùng hàm sprintf[] hoặc printf[] để in ra kết quả crc32[] là dương và có định dạng thập phân.

Để hiển thị kết quả dưới dạng thập lục phân [hệ 16] bạn có thể sử dụng định dạng “%x” khi dùng hàm sprintf[] hoặc printf[] nhưng cũng có thể dùng hàm dechex[], cả 2 cách đều có tác dụng hiển thị kết quả của hàm crc32[] thành số nguyên dương.

Trên nền tảng 64bit cũng có thể trả lại kết quả là số nguyên âm với các giá trị kết quả cao, phá vỡ quá trình chuyển đổi sang hệ 16 với phần âm thêm hậu tố 0xFFFFFFFF########. Với hệ 16 dường như hầu hết các trường hợp phổ biến nhất chúng tôi quyết định không phá vỡ quy trình này ngay cả khi nó phá vỡ phép so sánh nhị phân trực tiếp trong khoảng 50% số trường hợp khi chuyển từ 32 sang 64bits. Trong quá khứ, hàm trả về một số nguyên có thể không phải là ý tưởng tốt nhất và việc trả về một chuỗi hệ 6 [hex] ngay lập tức [ví dụ hàm md5[]] sẽ có thể là một ý tưởng tốt hơn. Với một giải pháp linh động hơn bạn cũng có thể xem tới hàm hash[]. hash[“crc32b”, $str] sẽ trả về chuỗi tương tự như dechex[crc32[$str]].

MÃ CRC được thiết lập trên cơ sở coi chuỗi bit là cách biểu diễn đa thức chỉ với câc hệ số 0 và 1, còn khung k bit được coi như danh sách các hệ số của đa thức với k giá trị , bắt đầu từ xk-1 đến x0, gọi là đa thức bậc k-1 .

Ví dụ chuỗi 110001 có 6 bit và nó biễu diễn cho đa thức x5+x4+x0. Các phép tính đại số đa thức được thực hiện theo modul 2 [XOR]. Khi sử dụng phương pháp này thì cả bên phát và bên thu phải có cùng một đa thức sinh G[x]. Cả hai bit bậc thấp [LSB] và bậc cao [MSB] của G[x] phải là 1. Ðể có thể tính được CRC cho một khung với m bit tương ứng với đa thức M[x], khung phải dài hơn đa thức sinh. Nguyên lý thực hiện là gắn các byte CRC vào đằng sau khung sao cho đa thức biểu diễn cho khung có đã có các byte CRC phải chia hết cho G[x]. Khi máy thu nhận được khung, nó bị thử cho G[x], nếu còn dư thì có nghĩa là quá trình truyền có lỗi.

Thuật toán để tính CRC như sau:

– bước 1: Gọi bậc của G[x] là r. Thêm r bit 0 vào cuối khung [bậc thấp], sao cho nó có m+n bit tương ứng với đa thức xr .M[x].

– bước 2: Chia chuỗi bit tương ứng với G[x] thành chuỗi bits tương ứng với xr .M[x], sử dụng phép chia modul 2.

– bước 3: Lấy chuỗi tương ứng với đa thức xr .M[x] trừ đi cho phần dư [phần này luôn luôn có r bit hoặc ít hơn], kết quả thu được là khung đã có CRC để truyền, gọi là đa thức T[x] Mã đa thức với độ dài r bit kiểm tra sẽ cho phép phát hiện được mọi lỗi chùm có độ dài nhỏ hơn hoặc bằng r.

Trên thực tế, các đa thức sinh đã được quốc tế tiêu chuẩn hoá:

CRC-12: G[x]=x12+x11+x3+x2+x1+1

CRC-16: G[x]=x16+x15+x2+1

CRC-CCITT: G[x]=x16+x12+x5+1

Trong đó CRC-12 được sử dụng khi kí tự được mã hoá 6 bit, còn hai đa thức còn lại được dùng khi kí tự mã hoá 8 bit. Các CRC 16 bit như CRC-16 và CRC-CCITT sẽ tìm thấy tất cả các lỗi đơn và lỗi đôi, các lỗi có số bit là lẻ, tất cả các lỗi chùm có độ dài không quá 16 bit, 99,997% lỗi chùm 17 bit và 99,998% lỗi chùm từ 18 bit trở lên.

CRC [Cyclic Redundancy Check] còn được gọi là phương pháp mã đa thức hoặc mã vòng. Phương pháp này được sử dụng trong hầu hết các hệ thống truyền thông. Tuy cái tên của nó không biểu hiện nhiều, nhưng ý tưởng ở đây là thông tin kiểm lỗi [ở đây được gọi là checksum] phải được tính bằng một thuật toán thích hợp, trong đó giá trị mỗi bit của thông tin nguồn đều được tham gia nhiều lần vào quá trình tính toán.
     Để tính toán thông tin kiểm lỗi đó, người ta dùng một “đa thức phát” G [generator polynomial] có một dạng đặc biệt. Chính vì thế phương pháp này còn được gọi là phương pháp dùng đa thức. G được qui ước dưới dạng nhị phân, tức các hệ số của nó chỉ có giá trị 1 hoặc 0 tương ứng với các chữ số trong một dãy bit.
 Ví dụ:
   Dạng đa thức: G = x7 + x6 + x5 + [0x4 + 0x3 ] + x2 + [0x1 ] + 1
  Dạng nhị phân: G = {11100101}
  Dạng octal: G = {345}
Nguyên tắc cơ bản của phương pháp CRC
     Giả sử đa thức G có bậc n, ví dụ x 3 +x+1 tương ứng với dãy bit {1011}. Dãy bit mang thông tin nguồn I được thêm vào n bit 0 và coi như một đa thức nhị phân P. Ví dụ thông tin nguồn là {110101} thì sau khi thêm 3 bit 0, ta có dãy bit {110101000} tương ứng với đa thức P = x8 +x7 +x5 +x3 .
• Đa thức P được chia cho đa thức G, dựa vào các qui tắc đơn giản của phép trừ không có nhớ như sau:
1 - 1 = 0
0 - 0 = 0
1 - 0 = 1
 0 - 1 = 1
 • Không cần quan tâm tới kết quả của phép chia, phần dư R [lấy n chữ số] của phép chia được thay thế vào chỗ của n chữ 0 bổ sung trong P, tức là ta có D = P + R. Theo tính chất của phép chia đa thức nhị phân, nếu D-R chia hết cho G thì D = P+R cũng vậy. R được gọi là checksum và D chính là dãy bit được gửi đi thay cho I.
 • Giả sử dãy bit nhận được là D' không chia hết cho G thì tức là D khác D', ta có thể khẳng định được rằng bức điện chắc chắn bị lỗi. Ngược lại, nếu D' chia hết cho G, thì xác suất rất cao là bức điện nhận được không có lỗi. Ta nói “xác suất cao”, bởi mỗi bit trong thông tin nguồn tham gia nhiều vòng [cyclic] vào tính toán thông tin bổ trợ nên khả năng “dữ kiện sai mà kết quả đúng” là rất ít.
Ví dụ minh họa
 • Thông tin cần truyền I = 110101
• Đa thức qui ước G = 1011 [tức x3 + x + 1]
 • Thêm 3 bit 0 vào thông tin nguồn I, ta có P = 110101000
• Chia đa thức P : G theo kiểu nhị phân


• Dãy bit được chuyển đi: D = P + R = 110101111
• Giả sử dữ liệu nhận được là D' = 110101111
• Chia đa thức D' : G 110101111 : 1011 = 111101
 Phần dư 0000 -> Xác suất rất cao là không có lỗi
    Một điều đáng chú ý là tuy phương pháp CRC có vẻ như phức tạp, nhưng thực sự việc thực hiện nó lại rất đơn giản. Phép chia đa thức nhị phân ở đây được thực hiện thuần túy bởi các phép trừ không có nhớ - hay chính là các phép logic XOR. Bên cạnh đó chỉ cần các phép sao chép và so sánh bit thông thường.
    Như ta thấy, khả năng phát hiện lỗi được đặc trưng qua khoảng cách Hamming phụ thuộc hoàn toàn vào cách chọn đa thức qui ước G. Tuy nhiên, để phương pháp này đạt được hiệu quả tối ưu, cần cân nhắc cả tới quan hệ giữa chiều dài của dãy bit mang thông tin nguồn và bậc của đa thức G. Một cách ký hiệu thường được dùng để chỉ quan hệ này được gọi là mã [m, n], trong đó m là tổng số bit và n là số bit mang dữ liệu. Một cấu trúc bức điện theo tiêu chuẩn DIN 19 244:
Tên gọi: Mã [8i+8, 8i], với i = 1...15 là số byte [octet] của dữ liệu
Lớp cấu trúc [format class]: FT2
Đa thức phát: G = 11100101, tức x7 + x6 + x5 + x2 + 1
Khoảng cách Hamming: HD = 4
Ví dụ với i = 7, ta sẽ có mã [64, 56], tức bức điện dài 8 byte chứa 7 byte dữ liệu. Trong 8 bit kiểm lỗi có 7 bit là phần dư R được tính theo phương pháp CRC, bit còn lại chính là parity bit chẵn của R, sau đó giá trị mỗi bit lại được đảo lại.

CRC là gì trong xuất nhập khẩu?

Gỗ nhựa CRC là gì? Gỗ nhựa CRC là dòng sản phẩm mới được cấu tạo từ những vật liệu tổng hợp gồm bột gỗ, bột đá, hạt nhựa, và các chất liên kết khác. Với nguyên vật liệu đầu vào chất lượng tốt tạo ra thành phẩm sản phẩm có thể đảm bảo trong môi trường khí hậu nhiệt đới khắc nghiệt của Việt Nam.

CRC 32 là gì?

CRC32 [cyclic redundancy check 32-bit] một loại hàm băm, được dùng để sinh ra giá trị kiểm thử có độ dài 32-bit của một chuỗi. Hàm này thông thường được dùng để xác nhận tính toàn vẹn của dữ liệu được truyền đi.

Chủ Đề