github.com/infraboard/keyauth@v0.8.1/common/password/validater.go (about)

     1  package password
     2  
     3  import (
     4  	"regexp"
     5  )
     6  
     7  // Validater 校验器
     8  type Validater interface {
     9  	Reset(pass string)
    10  	IncludeNumbers() bool
    11  	IncludeLowercaseLetters() bool
    12  	IncludeUppercaseLetters() bool
    13  	IncludeSymbols() bool
    14  	LengthOK(limit int) bool
    15  }
    16  
    17  // NewValidater 生产检查器
    18  func NewValidater(pass string) Validater {
    19  	return &validater{
    20  		pass:       pass,
    21  		numReg:     `[0-9]{1}`,
    22  		lowerReg:   `[a-z]{1}`,
    23  		upperReg:   `[A-Z]{1}`,
    24  		symbolsReg: `[!@#~$%^&*()+|_]{1}`,
    25  	}
    26  }
    27  
    28  // Validater 校验密码强度
    29  type validater struct {
    30  	pass       string
    31  	numReg     string
    32  	lowerReg   string
    33  	upperReg   string
    34  	symbolsReg string
    35  }
    36  
    37  func (v *validater) Reset(pass string) {
    38  	v.pass = pass
    39  }
    40  
    41  // IncludeNumbers 是否包含数字
    42  func (v *validater) IncludeNumbers() bool {
    43  	return v.match(v.numReg)
    44  }
    45  
    46  // IncludeLowercaseLetters 是否包含小写字母
    47  func (v *validater) IncludeLowercaseLetters() bool {
    48  	return v.match(v.lowerReg)
    49  }
    50  
    51  // IncludeUppercaseLetters 是否包含大写字母
    52  func (v *validater) IncludeUppercaseLetters() bool {
    53  	return v.match(v.upperReg)
    54  }
    55  
    56  // IncludeSymbols 是否包含特殊字符
    57  func (v *validater) IncludeSymbols() bool {
    58  	return v.match(v.symbolsReg)
    59  }
    60  
    61  // LengthOK 长度是否合法
    62  func (v *validater) LengthOK(limit int) bool {
    63  	return len(v.pass) >= limit
    64  }
    65  
    66  func (v *validater) match(reg string) bool {
    67  	if b, err := regexp.MatchString(reg, v.pass); !b || err != nil {
    68  		return false
    69  	}
    70  
    71  	return true
    72  }