Here's FNV-1a in 32-bits as a single excel formula, where cell A1 has the string you want to hash:
=LET(
Y, LAMBDA(G,a,b,m,res,
IF(0<b,
G(
G,
MOD(a, m) * 2,
TRUNC(b / 2),
m,
IF(MOD(b, 2) = 1,
MOD(res + MOD(a, m), m),
res)),
res)),
mulmod, LAMBDA(a,b,m, Y(Y,a,b,m,0)),
p, 16777619 +N("FNV_prime for 32 bits"),
o, 2166136261 +N("FNV_offset_basis for 32 bits"),
m, POWER(2,32) +N("modulus for 32 bits"),
s, A1,
IF(ISBLANK(s),
0,
REDUCE(o,
ROW(INDIRECT("1:"&LEN(s))),
LAMBDA(acc,i,mulmod(p, BITXOR(acc, CODE(MID(s,i,1))), m)))))
I protect against arithmetic overflow in the recursive mulmod. a * 2
won't overflow because m == MAX_UNIT == 4294967295
while excel uses doubles for math and they're safe up to 9,007,199,254,740,993
Wrap the REDUCE(...)
term in DEC2HEX()
for typical hex output.
Examples:
"BAD" => 2775452120 or A56E09D8 (in hex)
"DAB" => 772135228 or 2E05D93C
"ab" => 1294271946 or 4D2505CA
"AB" => 752165258 or 2CD5218A
"" => 0
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." => 2080740573 or 7C0594DD