...
1
2
3
4
5
6
7
8
9
10
11
12
13
14 package netutils
15
16 import (
17 "crypto/sha1"
18 "fmt"
19 "log"
20 )
21
22
23
24 func CompressName(originalName string, targetLength int, namePostFix string) (name string) {
25 if targetLength < 7 {
26 log.Fatal("targetLength shouldn't be less than 7")
27 }
28 if targetLength-7-len(namePostFix) < 0 {
29 log.Fatalf("namePostFix longer than (targetLength-7) = %d: %s", targetLength-7, namePostFix)
30 }
31
32 if len(originalName) < 6 {
33
34
35 name = originalName + "_" + namePostFix
36 return
37 }
38
39 namePrefix := originalName[0:5]
40 nameRest := originalName[5:]
41
42 hasher := sha1.New()
43 hasher.Write([]byte(nameRest))
44 hashValue := fmt.Sprintf("%x", hasher.Sum(nil))
45
46
47 name = namePrefix + "_" + hashValue[0:targetLength-7-len(namePostFix)] + "_" + namePostFix
48
49 return
50 }
51