@gravityforms/utils
Version:
JavaScript utilities for Gravity Forms development.
30 lines (26 loc) • 841 B
JavaScript
/* global BigInt */
/* eslint-disable no-bitwise */
/**
* @function fnvHash
* @description FNV-1a 64-bit hash function
*
* @since 4.0.2
*
* @param {*} input The input to hash
*
* @return {string} The 64-bit FNV-1a hash of the input as a 16-character hex string
*/
export const fnvHash = ( input ) => {
const str = String( input );
let hash = 14695981039346656037n; // FNV-1a 64-bit basis (as BigInt)
const prime = 1099511628211n; // FNV-1a 64-bit prime
const mask = 0xFFFFFFFFFFFFFFFFn; // Mask to 64 bits
for ( let i = 0; i < str.length; i++ ) {
const charCode = BigInt( str.charCodeAt( i ) );
hash ^= charCode; // XOR with current character
hash *= prime; // Multiply by prime
hash &= mask; // Mask to 64 bits
}
// Convert to hex string (16 chars for 64 bits)
return hash.toString( 16 ).padStart( 16, '0' );
};