23 lines · 875 B · TypeScript
RawDownload
/** * @returns 64-bit integer as hex string */export function hashString(str: string) {  let hash1 = 0xdeadbeefn; // First 32-bit seed  let hash2 = 0x41c6ce57n; // Second 32-bit seed  const prime = 0x1000193n; // Large prime for multiplication  const mask = 0xffffffffn; // 32-bit mask   for (let i = 0; i < str.length; i++) {    const char = BigInt(str.charCodeAt(i));    // Update hash1: multiply by prime, add character, and rotate    hash1 = (hash1 * prime) ^ char;    hash1 = ((hash1 << 5n) | (hash1 >> 27n)) & mask; // Rotate left 5 bits    // Update hash2: XOR with character and multiply by prime    hash2 = (hash2 ^ char) * prime;    hash2 = ((hash2 << 7n) | (hash2 >> 25n)) & mask; // Rotate left 7 bits  }   // Combine both hashes into a 64-bit result  const combined = (hash1 << 32n) | hash2;  return combined.toString(16).padStart(16, "0");}