11
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

巡回冗長検査(CRC)とは

ウィキペディアによると

巡回冗長検査(じゅんかいじょうちょうけんさ、英: Cyclic Redundancy Check, CRC)は、誤り検出符号の一種で、主にデータ転送などに伴う偶発的な誤りの検出によく使われている。送信側は定められた生成多項式で除算した余りを検査データとして付加して送信し、受信側で同じ生成多項式を使用してデータを除算し、その余りを比較照合することによって受信データの誤り・破損を検出する。

巡回冗長検査は唯一の標準規格があるわけではなく、例えば CRC-12 では3種類の多項式が使われている。また、CRC-16 にはよく使われているものが8種類、CRC-32 は3種類存在する。

よく使われるCRC-32多項式は、IEEE勧告のものも V.42、イーサネット、FDDI、ZIP、PNG などで使われているものも、ハミング符号の生成多項式を使っている。これは、誤り検出性能がよいためである。ただし、iSCSIで使っている Castagnoli CRC-32C の方がさらに優れている。

送信者側と受信者側でデータに対して割り算をしてその余が一致するかを確認するんですね。面白い。

いろんな種類のいろんなアルゴリズムが存在しているようですが、CRC-32がよく使われるという印象を持ちました。

Erlangの:erlang.crc32/1

やっぱりCRC-32がよく使われるのでしょうか。Erlang:erlang.crc32/1関数が実装されています。

IEx
iex(1)> :erlang.crc32("闘魂")
628560421

iex(2)> :erlang.crc32("闘魂")
628560421

iex(3)> :erlang.crc32("闘魂x")
3355293142

これで気軽にCRC-32の巡回冗長検査できることがわかりました。

ご参考までに

11
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?