Skip to content

Instantly share code, notes, and snippets.

@gasp
Forked from lmas/djb2.go
Created January 20, 2019 14:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gasp/92ef9c53c512a76516fed029c4f11c36 to your computer and use it in GitHub Desktop.
Save gasp/92ef9c53c512a76516fed029c4f11c36 to your computer and use it in GitHub Desktop.
djb2, a non-cryptographic hash function
package djb2
// For when you ever need to implement a dictionary hash function,
// that's good enough, simple and fast.
//
// WARNING:
// Not cryptographicly secure!
//
// Source: https://en.wikipedia.org/wiki/DJB2
//
// EXAMPLE
//
//func main() {
// fmt.Println(djb2("a"))
// fmt.Println(djb2("b"))
//}
func djb2(s string) int64 {
var hash int64 = 5381
for _, c := range s {
hash = ((hash << 5) + hash) + int64(c)
// the above line is an optimized version of the following line:
//hash = hash * 33 + int64(c)
// which is easier to read and understand...
}
return hash
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment