1234567891011121314151617181920212223242526272829303132333435 |
- #!/usr/bin/ruby
- # Simple implementation of the Cyclic Redundancy Check (CRC32).
- # Reference:
- # https://web.archive.org/web/20240718094514/https://rosettacode.org/wiki/CRC-32
- 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
|