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 }