-
-
Save aculich/2dabf4c1368fb5a5a30095be81c8863d to your computer and use it in GitHub Desktop.
Fast and simple insecure string hash for JavaScript
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This is a simple, *insecure* hash that's short, fast, and has no dependencies. | |
// For algorithmic use, where security isn't needed, it's way simpler than sha1 (and all its deps) | |
// or similar, and with a short, clean (base 36 alphanumeric) result. | |
// Loosely based on the Java version; see | |
// https://stackoverflow.com/questions/6122571/simple-non-secure-hash-function-for-javascript | |
const simpleHash = str => { | |
let hash = 0; | |
for (let i = 0; i < str.length; i++) { | |
const char = str.charCodeAt(i); | |
hash = (hash << 5) - hash + char; | |
hash &= hash; // Convert to 32bit integer | |
} | |
return new Uint32Array([hash])[0].toString(36); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
For anyone landing here from google, I plotted this hashing function distribution using this stackoverflow answer's methodology, below are the results. I've also been benchmarking the performance,
murmur2
has the best performance in JS, so use that function if you need one.Simple hash:

Murmur2:
