> For the complete documentation index, see [llms.txt](https://trizen.gitbook.io/sidef-lang/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://trizen.gitbook.io/sidef-lang/programming_tasks/c/crc-32.md).

# CRC-32

```ruby
func create_crc32_table {
    256.of {|k|
        8.times {
            if (k & 1) {
                k >>= 1
                k ^= 0xedb88320
            }
            else {
                k >>= 1
            }
        }
        k
    }
}

func crc32(str, crc = 0) {
    static crc_table = create_crc32_table()
    crc &= 0xffffffff
    crc ^= 0xffffffff
    str.codes.each {|c|
        crc = ((crc >> 8) ^ crc_table[(crc & 0xff) ^ c])
    }
    return ((crc & 0xffffffff) ^ 0xffffffff)
}

say crc32("The quick brown fox jumps over the lazy dog").as_hex
say crc32("over the lazy dog", crc32("The quick brown fox jumps ")).as_hex
```

#### Output:

```
414fa339
414fa339
```
