mirror of
https://github.com/bellingcat/auto-archiver-api.git
synced 2026-06-08 03:28:35 +03:00
10 lines
427 B
Python
10 lines
427 B
Python
|
|
def fnv1a_hash_mod(s: str, modulo:int) -> int:
|
|
# receives a string and returns a number in [0:modulo-1], ensures an even distribution over the modulo range
|
|
hash = 0x811c9dc5 # FNV offset basis
|
|
fnv_prime = 0x01000193 # FNV prime
|
|
for char in s:
|
|
hash ^= ord(char)
|
|
hash *= fnv_prime
|
|
hash &= 0xFFFFFFFF # Keep it 32-bit
|
|
return (hash if hash < 0x80000000 else hash - 0x100000000) % modulo |