UNPKG

zss-engine

Version:
32 lines (31 loc) 947 B
const chars = 'abcdefghijklmnopqrstuvwxyz0123456789'; function simpleHash(str) { let hash = 0; for (let i = 0; i < str.length; i++) { const char = str.charCodeAt(i); hash = (hash << 5) - hash + char; } return Math.abs(hash); } function encodeBase36(num) { let result = ''; do { result = chars[num % 36] + result; num = Math.floor(num / 36); } while (num > 0); return result; } function getStartingChar(hash) { const chars = 'abcdefghijklmnopqrstuvwxyz'; return chars[hash % chars.length]; } export function genBase36Hash(object, n) { const serialized = JSON.stringify(object); const hash = simpleHash(serialized); let base36Hash = encodeBase36(hash); const startingChar = getStartingChar(hash); while (base36Hash.length < n - 1) { base36Hash = chars[hash % chars.length] + base36Hash; } return startingChar + base36Hash.slice(0, n - 1); }