init: create project
This commit is contained in:
139
server/service/data.go
Normal file
139
server/service/data.go
Normal file
@ -0,0 +1,139 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Data interface {
|
||||
String() string
|
||||
Masking() string
|
||||
}
|
||||
|
||||
var (
|
||||
_ Data = Address("")
|
||||
_ Data = Nickname("")
|
||||
_ Data = PhoneNumber(0)
|
||||
_ Data = IDNumber("")
|
||||
_ Data = QQNumber(0)
|
||||
_ Data = Password("")
|
||||
_ Data = Email("")
|
||||
_ Data = Address("")
|
||||
)
|
||||
|
||||
type (
|
||||
Name string
|
||||
Nickname string
|
||||
PhoneNumber int64
|
||||
IDNumber string
|
||||
QQNumber int64
|
||||
Password string
|
||||
Email string
|
||||
Address string
|
||||
)
|
||||
|
||||
func (address Address) Masking() string {
|
||||
return maskLeft(string(address), 1)
|
||||
}
|
||||
|
||||
func (address Address) String() string {
|
||||
return string(address)
|
||||
}
|
||||
|
||||
func (email Email) Masking() string {
|
||||
return maskLeft(email.String(), len(strings.Split(string(email), "@")[0])+1)
|
||||
}
|
||||
|
||||
func (email Email) String() string {
|
||||
return string(email)
|
||||
}
|
||||
|
||||
func (password Password) Masking() string {
|
||||
return maskLeft(password.String(), 4)
|
||||
}
|
||||
|
||||
func (password Password) String() string {
|
||||
return string(password)
|
||||
}
|
||||
|
||||
func (qqNumber QQNumber) Masking() string {
|
||||
return maskLeft(qqNumber.String(), 3)
|
||||
}
|
||||
|
||||
func (qqNumber QQNumber) String() string {
|
||||
return strconv.Itoa(int(qqNumber))
|
||||
}
|
||||
|
||||
func (idNumber IDNumber) Masking() string {
|
||||
return mask(maskLeft(idNumber.String(), 3), 16, 16)
|
||||
}
|
||||
|
||||
func (idNumber IDNumber) String() string {
|
||||
return string(idNumber)
|
||||
}
|
||||
|
||||
func (phoneNumber PhoneNumber) Masking() string {
|
||||
return mask(phoneNumber.String(), 3, 6)
|
||||
}
|
||||
|
||||
func (phoneNumber PhoneNumber) String() string {
|
||||
return strconv.Itoa(int(phoneNumber))
|
||||
}
|
||||
|
||||
func (nickname Nickname) Masking() string {
|
||||
return maskLeft(nickname.String(), 1)
|
||||
}
|
||||
|
||||
func (nickname Nickname) String() string {
|
||||
return string(nickname)
|
||||
}
|
||||
|
||||
func (name Name) Masking() string {
|
||||
return maskLeft(name.String(), 1)
|
||||
}
|
||||
|
||||
func (name Name) String() string {
|
||||
return string(name)
|
||||
}
|
||||
|
||||
func isPhoneNumber(number int) bool {
|
||||
numberStr := strconv.Itoa(number)
|
||||
if len(numberStr) != 11 {
|
||||
return false
|
||||
}
|
||||
// https://www.miit.gov.cn/n1146295/n1652858/n1652930/n3757020/c5623267/part/5623278.doc
|
||||
s := []int{
|
||||
130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
|
||||
145, 146, 147, 148, 148,
|
||||
150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
|
||||
161, 162, 164, 165, 167,
|
||||
170, 172, 173, 175, 176, 177, 178, 179,
|
||||
181, 182, 183, 184, 185, 186, 187, 188, 189,
|
||||
190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
|
||||
}
|
||||
header, _ := strconv.Atoi(numberStr[:3])
|
||||
for _, num := range s {
|
||||
if num == header {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func whatType(value string) (result []interface{}) {
|
||||
if number, err := strconv.ParseInt(value, 10, 64); err == nil {
|
||||
if number <= 19999999999 && isPhoneNumber(int(number)) {
|
||||
result = append(result, PhoneNumber(number))
|
||||
}
|
||||
if number <= 99999999999 && len(strconv.Itoa(int(number))) >= 5 {
|
||||
result = append(result, QQNumber(number))
|
||||
}
|
||||
}
|
||||
if len(value) == 18 {
|
||||
result = append(result, IDNumber(value))
|
||||
}
|
||||
if strings.Contains(value, "@") {
|
||||
result = append(result, Email(value))
|
||||
}
|
||||
return result
|
||||
}
|
Reference in New Issue
Block a user