def fnv1a_64(string):
    """ Hashes a string using the 64 bit FNV1a algorithm

    For more information see:
        https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function
    @param string The key to hash
    @returns Hashed key
    """
    fnv_offset = 0xcbf29ce484222325 # The standard FNV 64 bit offset base
    fnv_prime = 0x100000001b3 # The standard FNV 64 digit prime
    hash = fnv_offset
    uint64_max = 2 ** 64
    # Iterate through the bytes of the string, ie the characters
    for char in string:
        # ord() converts the character to its unicode value
        hash = hash ^ ord(char)
        hash = (hash * fnv_prime) % uint64_max
    return hash