| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package config
- import (
- "math"
- "regexp"
- )
- func anyRegexMatch(f string, res []*regexp.Regexp) bool {
- for _, re := range res {
- if regexMatched(f, re) {
- return true
- }
- }
- return false
- }
- func regexMatched(f string, re *regexp.Regexp) bool {
- if re == nil {
- return false
- }
- if re.FindString(f) != "" {
- return true
- }
- return false
- }
- func containsDigit(s string) bool {
- for _, c := range s {
- switch c {
- case '1', '2', '3', '4', '5', '6', '7', '8', '9':
- return true
- }
- }
- return false
- }
- // shannonEntropy calculates the entropy of data using the formula defined here:
- // https://en.wiktionary.org/wiki/Shannon_entropy
- // Another way to think about what this is doing is calculating the number of bits
- // needed to on average encode the data. So, the higher the entropy, the more random the data, the
- // more bits needed to encode that data.
- func shannonEntropy(data string) (entropy float64) {
- if data == "" {
- return 0
- }
- charCounts := make(map[rune]int)
- for _, char := range data {
- charCounts[char]++
- }
- invLength := 1.0 / float64(len(data))
- for _, count := range charCounts {
- freq := float64(count) * invLength
- entropy -= freq * math.Log2(freq)
- }
- return entropy
- }
|