CRC32 has a too large possibility for collisions. We could use pack(index) . substring(crc32(url)), which is still acceptably random enough to not be guessed.