65 lines
1.3 KiB
Go

package common
import (
"backend/pkg/errors"
"regexp"
"strconv"
"strings"
"github.com/ethereum/go-ethereum/common"
)
func IsValidPhone(value string) (bool, error) {
re := regexp.MustCompile(`^(?:0|\+98|0098)(\d{10})$`)
result := re.FindStringSubmatch(value)
if len(result) > 0 {
return true, nil
}
return false, errors.ErrPhoneInvalid
}
func IsValidNationalID(value string) (bool, error) {
valueCount := len(value)
if valueCount < 8 {
return false, errors.ErrNationalIDInvalid
}
if valueCount >= 8 && valueCount < 10 {
value = strings.Repeat("0", 10-valueCount) + value
}
var valueSlices []uint8
for _, s := range value {
i, err := strconv.ParseInt(string(s), 10, 8)
if err != nil {
return false, errors.ErrNationalIDInvalid
}
valueSlices = append(valueSlices, uint8(i))
}
s := calculateNationalIDNumbers(&valueSlices)
s %= 11
l := valueSlices[len(value)-1]
if (s < 2 && s != int(l)) || (s >= 2 && int(l) != 11-s) {
return false, errors.ErrNationalIDInvalid
}
return true, nil
}
func calculateNationalIDNumbers(valueSlices *[]uint8) (sum int) {
var i uint8
for i = 10; i >= 2; i-- {
sum += int(i * (*valueSlices)[10-i])
}
return sum
}
func IsValidPublicKey(value string) (bool, error) {
if !common.IsHexAddress(value) {
return false, errors.ErrWalletInvalid
}
return true, nil
}