Files
colorhash/hash.go
2022-03-25 20:40:57 -07:00

37 lines
609 B
Go

package go_colorhash
import (
"crypto/md5"
"encoding/binary"
"hash/fnv"
"io"
)
const MaxUint = ^uint(0)
const MaxInt = int(MaxUint >> 1)
func HashString(s string) int {
h := fnv.New64()
io.WriteString(h, s)
hashb := h.Sum(nil)
hashb = hashb[len(hashb)-8:]
lsb := binary.BigEndian.Uint64(hashb)
sint := int(lsb)
if sint < 0 {
sint = sint + MaxInt
}
return sint
}
func HashBytes(r io.Reader) int {
h := md5.New()
io.Copy(h, r)
hashb := h.Sum(nil)
hashb = hashb[len(hashb)-8:]
lsb := binary.BigEndian.Uint64(hashb)
sint := int(lsb)
if sint < 0 {
sint = sint + MaxInt
}
return sint
}