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

Output:

414fa339
414fa339

Last updated